繁体   English   中英

变量声明和定义不匹配

[英]Variable declaration and definition mismatch

我正在使用C89编译器(嵌入式系统)。

我遇到了一些C代码,其中一个翻译单元将变量定义为bool varName; ,其中boolunsigned chartypedef 另一个转换单元forward将变量声明如下: extern char varName;

这显然是一种类型不匹配,并且是一个错误。 我的问题是,这违反了什么确切的规则? 我的下意识反应是它违反了ODR,但是只有一个定义,所以我不相信这是ODR违规。

6.2.7p2

引用同一对象或函数的所有声明都应具有兼容类型; 否则,行为未定义。

C89标准具有相同的段落。

关于联系的段落进一步解释了涉及同一对象的声明:

可以使用在不同作用域或同一作用域中多次声明的标识符通过称为链接的过程来引用相同的对象或函数。 有三种联系:外部,内部和无。

在构成整个程序的一组翻译单元和库中,具有外部链接的特定标识符的每个实例表示相同的对象或功能。 在一个翻译单元内,具有内部链接的标识符的每个实例表示相同的对象或功能。 没有链接的标识符表示唯一的实体。

兼容类型本质上意味着相同的类型,有一些小的警告(例如, extern int foo[];extern int foo[3];兼容extern int foo[3]; )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM