Я скомпилировал эти коды в MSVC:определение типа в скобках
int a=sizeof(struct{char c;});
и
int b=((struct{char c;} *)0,0);
и
printf("%p",(struct{char c;} *)0);
Как коды C, они могут передать компиляции с предупреждением (Предупреждение c4116: определение безымянного типа в круглых скобках. Если вы укажете имя, это «предупреждение c4115: «Что бы ни было»: определение имени в круглых скобках »);
Как коды C++, они скомпилированы с кучей ошибок.
Мои вопросы:
1. В C, являются ли определения типов в круглых скобках действительными? Почему я получаю это предупреждение?
2. В C++ существуют определения типов в круглых скобках?
EDIT:
3. Почему?
Я уверен, что это недопустимо в C++ и возможно допустимо в C (или, может быть, просто в расширении). – chris
В чем смысл этого вопроса? Где это было бы полезно? – RedX
@ user1920482, Это совсем не хороший тест. Рассмотрим 'int &r = 5;', который может компилироваться с помощью MSVC и известен как расширение компилятора зла. Или рассмотрите VLA, которые, как и на C++ 11, все еще не являются стандартными, но многие используют их. – chris