尝试使用 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/