WSL 发行版中的 __USE_POSIX 和 VS Code

WSL 发行版中的 __USE_POSIX 和 VS Code

我正在学习 C,通常我在 Ubuntu 中使用 VS Code 进行编码。为了方便起见,我试图将我的学习材料迁移到 Windows,我的许多其他工作都在 Windows 上进行,因此我安装了 WSL 2 及其发行版 Ubuntu 18.04 LTS。安装适用于 Windows 的 VS Code 及其远程扩展以与 WSL 配合使用后,我在 VS Code 中启动一个新的 WSL 会话,使用 IntelliSense 安装 C/C++ 扩展,然后编写一个简单的程序,如下所示,仅用于演示:

#include <signal.h>

int main()
{
    kill(-1, SIGKILL);
}

VS Code 的问题在于,程序编译时,其 IntelliSense 无法检测标头kill中的函数signal.h。通过进一步调查头文件,我发现以下部分变暗了

#ifdef __USE_POSIX
extern int kill (__pid_t __pid, int __sig) __THROW;
#endif /* Use POSIX.  */

以及其他__USE_POSIX被检查的部分,包括但不限于siginfo_t, struct sigaction

有没有办法让 VS Code 识别这些宏/变量以启用 IntelliSense 的帮助?

答案1

您可以#define __USE_POSIX在上面添加包含相关标头的位置,或者如果您想将其定义为编译器参数(可能通过标志-D或通过 CMake 或其他方式),该文件.vscode/c_cpp_properties.json允许您指定使用哪些标志,例如所以:

"configurations": [{
   "defines":["__USE_POSIX"]
}]

https://github.com/Microsoft/vscode-cpptools/issues/304有关此功能的更多信息。

相关内容