gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 05:29:55 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com