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