[英]Variable declaration and definition mismatch
我正在使用C89編譯器(嵌入式系統)。
我遇到了一些C代碼,其中一個翻譯單元將變量定義為bool varName;
,其中bool
是unsigned char
的typedef
。 另一個轉換單元forward將變量聲明如下: extern char varName;
。
這顯然是一種類型不匹配,並且是一個錯誤。 我的問題是,這違反了什么確切的規則? 我的下意識反應是它違反了ODR,但是只有一個定義,所以我不相信這是ODR違規。
引用同一對象或函數的所有聲明都應具有兼容類型; 否則,行為未定義。
C89標准具有相同的段落。
關於聯系的段落進一步解釋了涉及同一對象的聲明:
可以使用在不同作用域或同一作用域中多次聲明的標識符通過稱為鏈接的過程來引用相同的對象或函數。 有三種聯系:外部,內部和無。
在構成整個程序的一組翻譯單元和庫中,具有外部鏈接的特定標識符的每個實例表示相同的對象或功能。 在一個翻譯單元內,具有內部鏈接的標識符的每個實例表示相同的對象或功能。 沒有鏈接的標識符表示唯一的實體。
兼容類型本質上意味着相同的類型,有一些小的警告(例如, extern int foo[];
與extern int foo[3];
兼容extern int foo[3];
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.