преобразование lvalue-to-rvalue массива в ISO C

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: Извините, перепутал с выводом и отредактировал его:

6
задан paxdiablo 3 August 2015 в 02:46
поделиться