在按照c++ pp page255,嘗試在一個cpp文件(翻譯單元)中定義具有外部鏈接性的靜態變量int x = 1,在另一個cpp文件中用 extern int x;引用聲明時,運行會出現undefined reference to 'x'的錯誤。
兩個文件分別如下:


接着F5編譯,出現:

這時候,我們排查錯誤應該看最下面控制台中的紅框中的問題。
解決該問題,參考
https://blog.csdn.net/squall0984/article/details/107637986
https://blog.csdn.net/weixin_45514968/article/details/119153141
可以看出有兩個解決方法,本文不下載code-runner插件,而采用第一篇文章的方法。
問題的原因是vscode默認只能單文件編譯,因此在編譯 hello1.cpp時,並未編譯hello.cpp。
在tasks.json中修改:

tasks.json文件中的args參數,實際上就是調用gcc時,后面所跟的參數在初始的配置中,實際上編譯器執行的命令為gcc -g main.c -o main.exe,而修改后的配置中,執行的命令是gcc -g main.c hello.c -o main.exe,這是由於參數${file}代表的是被編譯的當前文件,而參數${fileDirname}\\*.cpp代表的是當前目錄下的所有.cpp文件。
因此這樣修改之后,當前目錄下所有的cpp文件都會被編譯;
修改好后運行,如下圖所示:

其中要注意的是,特意把hello.cpp和hello1.cpp單獨放在了externtest2的目錄下,這是因為如果放到有別的cpp文件的目錄下,會將這些cpp文件也一起編譯,這就會導致不同cpp文件中的main()函數等發生沖突,如我們在hello.cpp中也加上main()函數:

接着編譯hello.cpp:

可以看到報錯,在hello1.cpp中重復定義了main()函數,main()函數在hello.cpp中就進行了第一次定義。
因此,在運行有多個cpp文件的目錄中的cpp文件時,還是將tasks.json中的配置改回來;在需要寫有關外部引用的程序時,需要單獨建立目錄來存放cpp文件。
