Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Comeau编译器中的未命名结构_C++_C - Fatal编程技术网

C++ Comeau编译器中的未命名结构

C++ Comeau编译器中的未命名结构,c++,c,C++,C,为什么我们不能用这样的东西 struct { int bar; } Foo; int main() {} 在C++模式下,在C模式下,我们可以?< /P> ComeauTest.c,第4行:错误:使用未链接到的类型 声明一个变量 与链接}Foo; ^ 根据3.5:8 不带联动装置的类型不得用作带有外部联动装置的变量或函数类型,除非 -实体具有C语言链接7.5,或 -实体在未命名命名空间7.3.1中声明,或 -该实体不是odr 3.2使用的实体,或定义在同一翻译单位中 注意,这是从C+

为什么我们不能用这样的东西

struct
{
    int bar;
} Foo;

int main() {}
在C++模式下,在C模式下,我们可以?< /P> ComeauTest.c,第4行:错误:使用未链接到的类型 声明一个变量 与链接}Foo; ^

根据3.5:8

不带联动装置的类型不得用作带有外部联动装置的变量或函数类型,除非 -实体具有C语言链接7.5,或 -实体在未命名命名空间7.3.1中声明,或 -该实体不是odr 3.2使用的实体,或定义在同一翻译单位中

注意,这是从C++98中放宽的,C++98在3.5:8中有:

无链接的名称[…]不得用于声明具有链接的实体

此规则的原因是,为了引用来自另一个翻译单元的变量,您需要知道其类型,这对于未命名的类型是不可能的。在实践中,这是因为具有外部链接的变量会与其类型发生冲突,从而生成一个明确的名称,这对于未命名的类型是不可能的

然而,在您的代码中,实体Foo可能没有使用odr,而且最明确的定义是,因此它应该被符合标准的C++11编译器接受,而Comeau不是。

根据3.5:8

不带联动装置的类型不得用作带有外部联动装置的变量或函数类型,除非 -实体具有C语言链接7.5,或 -实体在未命名命名空间7.3.1中声明,或 -该实体不是odr 3.2使用的实体,或定义在同一翻译单位中

注意,这是从C++98中放宽的,C++98在3.5:8中有:

无链接的名称[…]不得用于声明具有链接的实体

此规则的原因是,为了引用来自另一个翻译单元的变量,您需要知道其类型,这对于未命名的类型是不可能的。在实践中,这是因为具有外部链接的变量会与其类型发生冲突,从而生成一个明确的名称,这对于未命名的类型是不可能的


但是,在您的代码中,实体Foo可能没有使用odr,而且最明确的定义是,因此它应该被符合标准的C++11编译器接受,哪个Comeau不是。

如果将文件重命名为cpp?。c是Comeau编译器Online的默认扩展名如果将文件重命名为cpp?。c是Comeau编译器的默认扩展名online@NikitaTrophimov报价的任何部分需要解释吗?其他编译器要么比Comeau更宽松,要么符合C++11。因此,我们只能在C++11中使用此类语句?关于-实体不是odr使用的3.2或定义在同一翻译单元中。-我有点不清楚这句话到底是什么意思?这是不是说:1。实体未使用odr或2。实体是在同一翻译单元中使用和定义的odr。在第1和第2条中,用法都有明确的定义?@NikitaTrophimov引用的任何部分需要解释吗?其他编译器要么比Comeau更宽松,要么符合C++11。因此,我们只能在C++11中使用此类语句?关于-实体不是odr使用的3.2或定义在同一翻译单元中。-我有点不清楚这句话到底是什么意思?这是不是说:1。实体未使用odr或2。实体是在同一翻译单元中使用和定义的odr。在1和2中,用法都有明确的定义?