C ++ ANSI ISO IEC 14882 2003 Приложение C.1 (стр. 668):
Изменение: результатом условного выражения, выражения присваивания или выражения запятой может быть lvalue
Обоснование: C ++ является объектно-ориентированным языком, который делает больший акцент на lvalues. Например, функции могут возвращать lvalues.
Влияние на исходную функцию: изменение семантики четко определенной функции. Некоторые выражения C, которые неявно полагаются на преобразования lvalue-rvalue, дадут разные результаты. Например,
char arr[100];
sizeof(0, arr)
дает 100 в C ++ и sizeof(char*)
в C.
...
Я читал это только сегодня, и я вспомнил, что пару месяцев спустя мой друг предложил проблему, которая заключалась в написании функции, которая возвращала бы 0, если она была скомпилирована с C ++, и 1, если она была скомпилирована с C Я решил это, воспользовавшись тем, что в Си структура была во внешней области видимости. Итак, учитывая эту новую информацию, я решил, что это будет еще одно решение вышеуказанной проблемы, которое я пробовал в Microsoft Visual Studio 2008, но независимо от того, скомпилирован ли он в код C или C ++, sizeof(0, arr)
всегда дает 4. Итак 2 вопросы:
1.Что такое ISO C? Это текущий стандарт C? Это единственный (я слышал, C быстро развивается)
2. Это ошибка в Microsoft C ++?
TIA
Редактировать: Извините, что перепутал результат и отредактировал его: