程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ const變量默認linkage為internal

C++ const變量默認linkage為internal

編輯:C++入門知識

======== x.cpp =========
void print_it();
char const hello[] = "asdf";
int main(int argc, char *argv)
{
    print_it();
    return 0;
}

======= y.cpp =========

#include <stdio.h>

extern char const hello[1] ;
void print_it()
{
  printf("string = %s ", hello );
}

鏈接時出現下面的錯誤:
y.obj : error LNK2019: unresolved external symbol "char const * const hello" (?hello@@3QBDB) referenced in function "void __cdecl print_it(void)" (?print_it@@YAXXZ)

原因就是C 中, const變量的默認linkage 規則變了. 要消除上面的錯誤, 要麼使用extern "C", 使它回到C語言的規則中, 要麼在x.cpp中 hello的定義處顯式地加上extern.

這是在C templates一書中, 8.3.3 小節中一句話的懷疑引起的:
template <char const *str>
class Message;

extern char const hello[] = "Hello, World!";

Message<hello>* hello_msg;

Note the need for the extern keyword because otherwise a const array variable would have internal linkage.

因為記得文件范圍內的函數和變量默認都是外部鏈接。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved