[英]Why does 'x' have internal rather than external linkage?
基於我對C ++ 2011規范的閱讀,我認為以下代碼將在file1.cc中創建一個帶有外部鏈接的變量“x”。 我認為我可以從main.cc訪問該變量,因此該程序將打印'x'。 但是,我從main.cc獲取了對'x'的未定義引用的鏈接器錯誤。 為什么file1.cc中的'x'有內部鏈接? 我認為編譯器將第3.5.3節解釋為在file1.cc中給出'x'內部鏈接。 但是我沒有“明確聲明”'x'是'const',因為該部分需要。 我正在使用g ++版本4.6.3。
main.cc:
#include <iostream>
typedef const char CC;
extern CC x[];
int main(void) {
std::cout << x[0] << std::endl;
}
file1.cc:
typedef const char CC;
CC x[] = "abc";
const
使一切變得不同。 在C ++中,在文件范圍內聲明的const
變量隱式具有內部鏈接。 這是因為在C ++中,const值可以用作編譯時常量(不留任何東西鏈接)。
看到這個答案 。
您可以在file1.cc中為您的定義添加extern
,以明確指定x
外部鏈接:
extern CC x[] = "abc";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.