c - VSCode C/C++ Intellisense 问题与 netinet/ip.h

标签 c visual-studio-code intellisense

尝试使用 struct ip 时,VSCode 报告 incomplete type is not allowed 错误。 我知道这是 intellisense 的问题,因为我的程序使用 gcc monitor.c -o monitor -lnet 编译得很好,所以没有实际错误,但 intellisense 似乎不同意。

这是获取错误的最少代码:

#include <netinet/ip.h>
#include <stdlib.h>

int main()
{
    struct ip * my_ip = (struct ip *) malloc(sizeof(struct ip));
}

我尝试将 /usr/include/** 添加到 c_cpp_propertied.json 文件中。

直接查看 ip.h 文件,我可以看到结构定义“隐藏”在 #ifdef __USE_MISC 中,所以我将其添加到定义中c_cpp_propertied.json 部分没有运气。

我的想法很新鲜,但我找不到与该问题相关的任何内容。反正没什么用。

最佳答案

Taking a look into the ip.h file directly I can see that the struct definition is "hidden" inside an #ifdef __USE_MISC so I added that to the defines section of c_cpp_propertied.json with no luck.

据此,您可以尝试在您的示例中执行以下操作:

#ifndef __USE_MISC
#define __USE_MISC
#endif // __USE_MISC


#include <netinet/ip.h>
#include <stdlib.h>


int main()
{
    struct ip * my_ip = (struct ip *) malloc(sizeof(struct ip));
}

说明:您提到结构隐藏在 #ifdef __USE_MISC 预处理器条件中。这意味着只有当您的代码中某处之前此文件定义#define __USE_MISC 存在,或者如果此定义通过编译器标志传递时,它才可见。似乎 VSCode C/C++ Intellisense 没有这样做,而 gcc 有


附言另外,请查看此宏的含义及其用途:link


附言进一步调查后发现,OP 在他的编译器标志/源文件中没有定义 _DEFAULT_SOURCE 定义。 因此,实际的答案是在包含之前添加以下代码片段(或添加到编译器标志或 IDE 设置):

#ifndef _DEFAULT_SOURCE
#define _DEFAULT_SOURCE
#endif // _DEFAULT_SOURCE

#include <netinet/ip.h>

// ...

关于c - VSCode C/C++ Intellisense 问题与 netinet/ip.h,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74823127/

相关文章:

visual-studio-code - Visual Studio Code files.autoSave onFocusChange 不起作用

javascript - Visual Studio Code 未在 Javascript 中执行错误检查

visual-studio-code - 如何在 VSCode 等 monaco-editor 中突出显示合并冲突 block ?

Delphi代码完成性能

检查两个系统之间的 (USB) 连接中的位错误(对于游戏)

c - 为什么我收到错误 "cannot find -lncurses"?

c - #define issue 如果它是从 if() block 中调用的

c++ - Intellisense 不使用模板 VS2012 终极 C++

compiler-construction - 在 typescript 中是否可以让函数返回扩展它的类的类型

c - 在 Subversion 中使用 Tessy