首页 > 解决方案 > Visual Studio 打开文件夹 GCC (Cygwin) 智能感知错误

问题描述

我正在尝试将 Visual Studio Community 2019 配置为用作开发针对 Nintendo 64 的开源 C 项目的 IDE。

makefile 似乎将 gcc-derivative ( mips64-elf-gcc) 定义为编译器,并-std=gnu99作为其中之一CFLAGS,所以我认为这意味着这是 C99。

我对 C 开发不太了解,所以我最初遵循了一个教程,该教程指导我设置 Cygwin。有一段时间,我在 Notepad++ 中编辑了 *.h 和 *.c 文件,然后使用 Cygwin 终端编译了所有内容(可能有上千种更好的方法,但我是 C/*nix nub,只是想弄点东西迅速落地)。Notepad++ 只是为了修补一些东西是可以的,但我对这个项目越来越认真,在 Notepad++ 中做任何真正的工作都是一件很麻烦的事情。我已经使用 Visual Studio 很长时间了,所以我想我会尝试在那里进行设置,因为我知道它支持 C/C++。

我已经成功地让 VS 使用“打开文件夹”功能并通过连接 CppProperties.json 和 tasks.vs.json 文件中的必要数据来运行我的 makefile。然而,在尝试让 IntelliSense 工作时,我遇到了一些我无法解决的错误。

1. stdio.h 和 string.h 中的“重复参数名称”

此错误有多个实例。问题似乎是这样的行:

FILE *  freopen (const char *__restrict, const char *__restrict, FILE *__restrict);

如您所见,有多个“参数”都命名为__restrict. 我仍然刚刚开始我的 C 之旅,所以我不完全确定这是什么,但我怀疑它不是参数名称,但可能会被#define编辑。使用 Agent Ransack 文件搜索实用程序,我查找了一些实例#define __restrict并确实找到了一些。我将这些路径添加到INCLUDE我的 CppProperties.json 文件的部分,但这根本没有帮助。

根据 VS Open Folder 教程,IntelliSense 有时会挂在预处理器指令上,所以我添加了推荐的 cpp.hint 文件,关闭 VS,删除 .vs 文件夹中的缓存数据,然后启动 VS 备份,但错误仍然存​​在坚持。

2. stdio.h 中的“预期为 ')'”

我认为这也与该__restrict问题有关。

FILE *  fopen (const char *__restrict _name, const char *__restrict _type);
                                      ^
                                      | expected a ')'

出于某种原因,它似乎对 _name 参数不满意。

3. 在我的 for 循环中“预期表达式/标识符“i”是未定义的”

我一直在处理for定义循环的代码中的任何位置,我都会收到这些错误。以下是错误示例:

void v(void)
{
    for (int i = 0; i < 25; i++)
    {    ^          ^
         |          | identifier "i" is undefined
         |
         | expected an expression
    }
}

但是,如果我将循环更改为以下,一切都很好。

void v(void)
{
    int i;
    for (i = 0; i < 25; i++)
    {

    }
}

它不喜欢intfor 循环的 init 表达式中的类型声明。我不确定我可以在配置中做些什么来破坏核心语言功能。我认为有关先前错误的某些内容正在影响这一点。


这些都不会影响构建过程,因为所有这些仍然是使用我在 Cygwin 中设置的所有内容通过 makefile 完成的,所以我想修复这些问题并不重要,但这样做的全部意义在于有一个很好的工作环境,并且经常出现 61 个错误可能会对这种情况产生很大的影响。

我已经尝试了我能想到的一切来解决这些问题,但没有任何效果。这对谷歌来说是一个特别困难的问题,因为搜索词需要大量潜在的影响因素,所以这并没有被证明是有效的。

任何帮助或建议表示赞赏。

标签: cvisual-studiogcccygwinc99

解决方案


推荐阅读