zwh*_*nst 4 c c++ definition parentheses
我在MSVC中编译了这些代码:
int a=sizeof(struct{char c;});
Run Code Online (Sandbox Code Playgroud)
和
int b=((struct{char c;} *)0,0);
Run Code Online (Sandbox Code Playgroud)
和
printf("%p",(struct{char c;} *)0);
Run Code Online (Sandbox Code Playgroud)
作为C代码,它们可以通过编译,但会出现警告(warning c4116: unnamed typeDefinition in Parentheses。如果给出名称,则为“ warning c4115: "Whatever" :named typeDefinition in Parentheses ");
作为 C++ 代码,它们在编译时会出现一堆错误。
我的问题是:
1.在C中,括号中的类型定义有效吗?为什么我会收到该警告?
2. 在C++中,括号中的类型定义有效吗?
编辑:
3.为什么?
在 C 中,sizeof可以应用于任何不是不完整类型的类型名称(6.5.3.4p1);包含结构体声明列表 (6.7.2.1p1) 的 struct-or-union-specifier 是一个type - specifier,因此也是一个type-name。MSVC 的警告有两个原因:首先,因为一些较旧的编译器(或用作 C 编译器的 C++ 编译器)可能不支持此用法,其次,因为它很不寻常,可能不是您想要的。
在 C++ 中,sizeof可以应用于type-id;类说明符是类型说明符,因此是type-id,但定义类的类说明符(或定义枚举的枚举说明符)只能出现在类声明或声明中using(7.1.6p3)。这可能是因为 C++ 类可以具有链接,并且允许它们出现在通用表达式(而不仅仅是定义)中会使情况变得复杂。