利用 Visual Studio Code 寫 C/C++ 程式時,發現一些系統定義或是函數被畫了無法識別的紅色波浪 (red squiggly line) 在下面,但是真的編譯程式又會過。
原因是那些定義被放在 feature test macros (FTM) 的後面,當沒有特別給像是 -ansi
, -std=c17
之類的參數時 gcc 預設會定義 _DEFAULT_SOURCE
巨集,因此編譯可以順利進行。但是 vscode 的解析器似乎是比照給了 -std=c17
之類的參數,因此這些 Linux 上特有的常數或函數定義就不會被抓到。
解決方法就是在 .vscode/c_cpp_properties.json
的 defines
區塊中,加上 _DEFAULT_SOURCE=1
或是 _XOPEN_SOURCE=700
來把 Linux 上的常數或函數定義納入。或是,為求慎重的話,也可以看函數的 man page 裡面所描述的 feature test macros 需求,來決定要怎麼設定。
Ref:
No comments:
Post a Comment