日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】vscode下编译告警“undefined reference”?三步教你如何解决

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】vscode下编译告警“undefined reference”?三步教你如何解决 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:vscode下編譯告警“undefined reference”?三步教你如何解決_squall0984的博客-CSDN博客


?

近些年來,由于VS Studio體積龐大、價格昂貴等原因,越來越多的C/C++開發者轉投VSCode的懷抱。VSCode有著免費1、開源2、多平臺支持、占用系統3資源少、插件豐富、界面美觀等諸多特點。對于初學者來說,是非常方便使用的IDE。許多同學在使用VSCode時,在同一文件夾下,存在多個文件時,編譯器無法找到引用的.h文件定義的問題,通過簡單幾步配置,即可此解決問題。

  • 問題描述
    • 打開TEST文件夾,創建hello.c, hello.h文件,

    hello.c

    #include <stdio.h>void hello() {printf("hello\n"); }

    hello.h

    #ifndef __HELLO_H__ #define __HELLO_H__extern void hello();#endif
    • 創建main.c


    main.c

    #include "hello.h"void main() {hello(); }
    • 選擇main.c,Run->Start Debugging,會出現編譯器報錯“undefined reference to `hello’”

      出現此問題的原因,是編譯器僅編譯了main.c文件,而未編譯hello.c文件。
  • 解決方法
    • 在VSCode工程界面中,按壓Ctrl+Shift+p,在彈出的輸入框中,輸入Tasks后,從提示選單中選擇Configure Task,再選擇C/C++:gcc.exe build active file


    • 此時,.VSCode目錄下會生成tasks.json文件

    tasks.json

    {"version": "2.0.0","tasks": [{"type": "shell","label": "C/C++: gcc.exe build active file","command": "D:\\Program Files\\mingw-w64\\x86_64-8.1.0-win32-seh-rt_v6-rev0\\mingw64\\bin\\gcc.exe","args": ["-g","${file}","-o","${fileDirname}\\${fileBasenameNoExtension}.exe"],"options": {"cwd": "D:\\Program Files\\mingw-w64\\x86_64-8.1.0-win32-seh-rt_v6-rev0\\mingw64\\bin"},"problemMatcher": ["$gcc"],"group": "build"}] }
    • 將args參數中的${file}修改為${fileDirname}\\*.c,再次執行Run->Start Debugging,可以看到終端中成功的顯示了"hello"字符
  • 問題原因
  • tasks.json文件中的args參數,實際上就是調用gcc時,后面所跟的參數在初始的配置中,實際上編譯器執行的命令為gcc -g main.c -o main.exe,而修改后的配置中,執行的命令是gcc -g main.c hello.c -o main.exe,這是由于參數${file}代表的是被編譯的當前文件,而參數${fileDirname}\\*.c代表的是當前目錄下的所有.c文件。

    同時,在此附上.json文件中,各變量名所代表的含義,共參考,查看來源。

    變量名含義
    ${workspaceRoot}當前打開的文件夾的絕對路徑+文件夾的名字
    ${workspaceRootFolderName}當前打開的文件夾的名字
    ${file}當前打開正在編輯的文件名,包括絕對路徑,文件名,文件后綴名
    ${relativeFile}從當前打開的文件夾到當前打開的文件的路徑,如當前打開的是test文件夾,當前的打開的是main.c,并有test/first/second/main.c 那么此變量代表的是 first / second / main.c
    ${fileBasename}當前打開的文件名+后綴名,不包括路徑
    ${fileBasenameNoExtension}當前打開的文件的文件名,不包括路徑和后綴名
    ${fileDirname}當前打開的文件所在的絕對路徑,不包括文件名
    ${fileExtname}當前打開的文件的后綴名
    ${cwd}任務開始運行時的當前工作目錄
    ${lineNumber}前打開的文件,光標所在的行數

  • VSCode使用的是 MIT Lisense, 可隨意下載, 分發, 商用等.?點擊下載???

  • github可直接看到源碼,?點擊查看,開源讓更多開發者參與進來, 集思廣益, 推動這款優秀的 IDE 發展.???

  • 下載vscode 1.29.0, 只有 44 MB 大小,安裝完約 189 MB。內存上, 相對于 eclipse, vscode 占用內存更少. eclipse 約占用 478 MB(1 個進程), vscode 約共占用 200 MB(6 個進程).???

  • 總結

    以上是生活随笔為你收集整理的【转】vscode下编译告警“undefined reference”?三步教你如何解决的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。