当尝试使用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
文件,我可以看到struct定义“隐藏”在#ifdef __USE_MISC
中,所以我将其添加到c_cpp_propertied.json
的defines部分,但没有成功。
我的想法很新鲜,而且我还没能找到任何与这个问题相关的东西。反正也没什么帮助。
1条答案
按热度按时间o7jaxewo1#
直接查看ip. h文件,我可以看到struct定义“隐藏”在#ifdef __USE_MISC中,所以我将其添加到c_cpp_propertied. json的defines部分,但没有成功。
根据这一点,您可以尝试在示例中执行以下操作:
说明:你提到struct隐藏在
#ifdef __USE_MISC
预处理器条件中。这意味着只有当在你的代码中某个地方在这个文件之前存在#define __USE_MISC
定义,或者这个定义是通过编译器标志传递的,它才是可见的。看起来VSCode C/C++ Intellisense没有这样做,而gcc做了另外,请看一下这个宏是什么意思,它的用途是什么:link
P.P.S.经过进一步调查发现OP在其编译器标志/源文件中没有定义
_DEFAULT_SOURCE
定义。因此,实际答案是在include之前添加以下代码片段(或添加到编译器标志或IDE设置中):