Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/30: Рейтинг темы: голосов - 30, средняя оценка - 4.93
 Аватар для Inferiym
1 / 7 / 3
Регистрация: 20.12.2011
Сообщений: 58

С + + и Visual C + + и чем они отличаются? Есть ли их изучение взаимно дополняющее или это совсем разные языки?

17.06.2012, 23:23. Показов 7673. Ответов 54
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Просветите убогого =)
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.06.2012, 23:23
Ответы с готовыми решениями:

JavaScript является каким то подразделом Java, или это совершенно разные языки?
Здравствуйте. Хочу изучит JavaScript, но не хотелось бы обходить вниманием Java. Подскажите, JavaScript является каким то подразделом...

Чем они отличаются..
Помогите с файлами! F:file of string; F1:file of char; F2:text; Нужно написать чем они отличаются. А также файловое...

Чем они отличаются и какую приобрести?
Чем отличается Видеокарта ASUS STRIX GeForce GTX 750 Ti OC 2GB GDDR5 (STRIX-GTX750TI-OC-2GD5) от Видеокарта ASUS GeForce GTX 750 Ti OC...

54
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
24.06.2012, 23:11
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Evg Посмотреть сообщение
Микрософтеры просто решили сделать дополнительные плюшки, дабы уберечь программистов от наиболее типичных ошибок
И добавить новые типичные ошибки.
C++
1
2
std::string str = "blabla";
printf("%s", str);
Работает в студии, хоть и противоречит здравому смыслу и падает в том же GCC.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.06.2012, 23:48
Пробовал на трех компилятора данный код
VC2010 выдает иероглефы
Builder2009 никак не регирует, как будто просто этих строчек нет
QtCreator заканчивается окошком "прекращение работы программы" т.е краш.

И на мой взгляд ни один из результатов не является нормальным...
По хорошему должна быть ошибка или хотябы ворнинг...
И краш явно не лучший вариант...
Его можно заметить, а можно и не заметить, а вот пользователь его точно заметит
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
25.06.2012, 00:00
Цитата Сообщение от Avazart Посмотреть сообщение
Ну да, сборищик мусора для того же... ну и C#...
Да нет, тут дело не в сборщиках мусора, а в отсутствии контроля за границей допустимой памяти во всяких функциях типа strcpy

Цитата Сообщение от CyBOSSeR Посмотреть сообщение
И добавить новые типичные ошибки.
C++
1
2
std::string str = "blabla";
printf("%s", str);
Работает в студии, хоть и противоречит здравому смыслу и падает в том же GCC.
А где тут ошибка? Просто при передаче класс передаётся по косвенности, а класс устроен так, что первое поле класса - массив char'ов. В итоге получается, что printf достаёт строку, как будто передавался указатель на массив char'ов. Ну или что-то около того. Собственно, функция printf является опасной (как и любая функция с vararg'ами), а потому такие эффекты - это нормально

Добавлено через 2 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Пробовал на трех компилятора данный код
VC2010 выдает иероглефы
Builder2009 никак не регирует, как будто просто этих строчек нет
QtCreator заканчивается окошком "прекращение работы программы" т.е краш.
Потому что в run-time поддержке компиляторов разная реализация внутренностей класса string

Цитата Сообщение от Avazart Посмотреть сообщение
По хорошему должна быть ошибка или хотябы ворнинг...
gcc точно умеет выдавать ворнинг по -Wall. Думаю, что и остальные умеют

Цитата Сообщение от Avazart Посмотреть сообщение
И краш явно не лучший вариант...
Если программа написана криво, то при чём тут компилятор?
1
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
25.06.2012, 00:21
Evg, std::string не является POD'ом, через эллипсис можно предавать только POD'ы. MSVC должен выдавать хотя бы warning.
2
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
25.06.2012, 00:38
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
через эллипсис можно предавать только POD'ы
О как... Это точно? А то в первом приближении не вижу причин, почему нельзя
1
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
25.06.2012, 00:44
Параграф 5.2.2 С++98, пункт 7:
When there is no parameter for a given argument, the argument is passed in such a way that the receiving function can obtain the value of the argument by invoking va_arg (lib.support.runtime). The lvalue-to-rvalue (conv.lval), array-to-pointer (conv.array), and function-to-pointer (conv.func) standard conversions are performed on the argument expression. After these conversions, if the argument does not have arithmetic, enumeration, pointer, pointer to member, or class type, the program is ill-formed. If the argument has a non-POD class type (clause class), the behavior is undefined. If the argument has integral or enumeration type that is subject to the integral promotions (conv.prom), or a floating point type that is subject to the floating point promotion (conv.fpprom), the value of the argument is converted to the promoted type before the call. These promotions are referred to as the default argument promotions.
2
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
25.06.2012, 00:53
Ясно. А есть идеи о причинах?
1
25.06.2012, 00:59

Не по теме:

тут велось обсуждение компиляторов и сразу назрел вопрос
Каким же компилятором лучше пользоваться новичку, чтобы в будущем не было много проблем с тем, что в одном компиляторе что-то было в другом нету
если не сложно вариант платной(если таковая имеется) и бесплатной

1
Evg
25.06.2012, 01:02

Не по теме:

Цитата Сообщение от DaskOFF Посмотреть сообщение

Не по теме:

тут велось обсуждение компиляторов и сразу назрел вопрос
Каким же компилятором лучше пользоваться новичку, чтобы в будущем не было много проблем с тем, что в одном компиляторе что-то было в другом нету
если не сложно вариант платной(если таковая имеется) и бесплатной

Мне кажется, что любой современный компилятор имеет какие-то свои собственные расширения. Так что если не иметь чёткого понимания, то с любым компилятором можно написать код, который не будет работать на другом компиляторе

1
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
25.06.2012, 01:06
Цитата Сообщение от Evg Посмотреть сообщение
А есть идеи о причинах?
Как я понимаю, аргументы перед вызовом копируются в стек, потом с помощью va_arg достаются, не POD типы нельзя скопировать "как есть", поэтому и запретили их использование.
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
25.06.2012, 01:07
Цитата Сообщение от Evg Посмотреть сообщение
А есть идеи о причинах?
Кажется, понял. В точке вызова будет создан объект, отвечающий за параметр. Но внутри функции объект уже нельзя корректно уничтожить, т.к. функция об этом объекте ничего не знает
2
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
25.06.2012, 01:12
Цитата Сообщение от DaskOFF Посмотреть сообщение
Каким же компилятором лучше пользоваться новичку, чтобы в будущем не было много проблем с тем, что в одном компиляторе что-то было в другом нету
если не сложно вариант платной(если таковая имеется) и бесплатно
Любым, просто документацией нужно пользоватся не специфичной для компилятора, и тогда пробем не должно быть.
Цитата Сообщение от Evg Посмотреть сообщение
Кажется, понял. В точке вызова будет создан объект, отвечающий за параметр. Но внутри функции объект уже нельзя корректно уничтожить, т.к. функция об этом объекте ничего не знает
Не понятно, не зря же есть va_end, который и так должен подчищать все что нужно перед возвратом.
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
25.06.2012, 01:16
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Не понятно, не зря же есть va_end, который и так должен подчищать все что нужно перед возвратом.
va_end как бы подчищает стек (т.е. плоскую память), хотя я ещё ни разу не видел реализации, где va_end был чем-то, отличным от пустышки

Здесь проблема не в чистке, а в вызове деструкторов. В точке вызова va_end уже нет никакой информации о том, каких классов и сколько объектов было положено в стек в точке вызова
1
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
25.06.2012, 01:24
Цитата Сообщение от Evg Посмотреть сообщение
va_end как бы подчищает стек (т.е. плоскую память), хотя я ещё ни разу не видел реализации, где va_end был чем-то, отличным от пустышки
Здесь проблема не в чистке, а в вызове деструкторов. В точке вызова va_end уже нет никакой информации о том, каких классов и сколько объектов было положено в стек в точке вызова
Да, пожалуй, ты прав.
1
25.06.2012, 01:30

Не по теме:

Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Любым, просто документацией нужно пользоватся не специфичной для компилятора, и тогда пробем не должно быть.
получается от компилятора не зависит на каких машинах программа будет работать или нет
все зависит от кода ?

1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
25.06.2012, 10:13
В C++0x есть изменения по пункту 5.2.2.7

When there is no parameter for a given argument, the argument is passed in such a way that the receiving function can obtain the value of the argument by invoking va_arg (18.10). [ Note: This paragraph does not
apply to arguments passed to a function parameter pack. Function parameter packs are expanded during
template instantiation (14.5.3), thus each such argument has a corresponding parameter when a function
template specialization is actually called. — end note ] The lvalue-to-rvalue (4.1), array-to-pointer (4.2), and
function-to-pointer (4.3) standard conversions are performed on the argument expression. An argument that
has (possibly cv-qualified) type std::nullptr_t is converted to type void* (4.10). After these conversions,
if the argument does not have arithmetic, enumeration, pointer, pointer to member, or class type, the
program is ill-formed. Passing a potentially-evaluated argument of class type (Clause 9) having a non-
trivial copy constructor, a non-trivial move constructor, or a non-trivial destructor, with no corresponding
parameter, is conditionally-supported with implementation-defined semantics.
If the argument has integral
or enumeration type that is subject to the integral promotions (4.5), or a floating point type that is subject
to the floating point promotion (4.6), the value of the argument is converted to the promoted type before
the call. These promotions are referred to as the default argument promotions.
Так что студия имеет на это право (если говорить о студии 2010 и выше).
1
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
25.06.2012, 20:52
Цитата Сообщение от ForEveR Посмотреть сообщение
Так что студия имеет на это право (если говорить о студии 2010 и выше).
Имеет право поддерживать передачу POD через эллипсис, но вот печатать std::string через %s уж точно нет.
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
25.06.2012, 20:58
CyBOSSeR, Да, по идее не имеет. Причина.
http://stackoverflow.com/quest... ual-studio
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
26.06.2012, 10:20
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Имеет право поддерживать передачу POD через эллипсис, но вот печатать std::string через %s уж точно нет.
Цитата Сообщение от ForEveR Посмотреть сообщение
CyBOSSeR, Да, по идее не имеет. Причина.
http://stackoverflow.com/quest... ual-studio
В общем-то то же самое, что я и говорил - просто звёзды встали соответствующим образом. Следующий код некорректен, но на intel'овских компиляторах будет работать:

C
#include <stdio.h>
 
/* Как бы MSVC'ная реализация std::string */
struct string
{
  char *s;
};
 
int main (void)
{
  struct string str;
  str.s = "abc";
  printf ("%s\n", str);
  return 0;
}
2
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
26.06.2012, 11:50
В смысле будет корректный вывод или просто будет компилиться?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.06.2012, 11:50

посмотрите чем они отличаются и какой лучше
В сборку реш взять процессор Процессор Intel Pentium G4600 OEM нашел на двух разных сайтах, стоят по разному и различие в цене почти на...

Visual Studio 2005 и Visual Studio 2008 сильно ли они отличаются друк от друга?
привет ребята:) вот у меня есть Visual Studio 2005 и Visual Studio 2008 возник вопрос сильно ли они отличаются друк от друга? пробывал...

Сложить три числа, если они отличаются не больше чем на 2
Есть к примеру 3 числа, A, B, C. Если эти числа отличаются не больше чем на 2, то сложить их. Как бы сделать проверку?

Что такое входной и выходной поток? чем они отличаются?
Что такое входной и выходной поток? чем они отличаются?

Какие существуют виды условного оператора и чем они отличаются
5. Какие существуют виды условного оператора и чем они отличаются?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru