我有两个C文件,
main.c
和library.c
,其中包含以下内容:
// main.c
#include <stdio.h>
int MY_NUMBER = 6;
#include "library.c"
int main() {
change_the_number();
printf("The number: %d\n", MY_NUMBER);
}
// library.c
void change_the_number() {
MY_NUMBER = 5;
}
运行
gcc main.c -o main
,然后运行 main
,我得到输出 The number: 5
,这正是我所期望的。
VSCode 在
MY_NUMBER
中对 library.c
下划线,抱怨“标识符 MY_NUMBER
未定义”。就我而言,这也是预期的行为 - 仅查看 library.c
,没有任何内容表明 MY_NUMBER
是什么或它来自哪里。
如何配置 Microsoft 的 C/C++ 扩展来识别
MY_NUMBER
?
到目前为止我尝试过的:
${workspaceFolder}
和 ${workspaceFolder}/**
添加到 C-Cpp > Default: Include Path
。library.c
更改为 library.h
(我真的认为这不会有任何作用,我是对的。)一个限制是我无法更改代码 - 我必须设置 IDE 以允许这种声明/使用安排,因为我是一名实习生,并且这种模式在我的代码库中重复数百次(如果不是数千次)我正在努力。我会向我的同事寻求帮助,但他们都没有使用带有 C/C++ 扩展的 VSCode - 每个人都使用不同的东西。
最终,如果 MS C/C++ 扩展不支持这种事情,那很好,我只会使用其他东西,但我认为有趣的是,这个完全有效的 C 程序会被标记为有问题。
万一有人偶然发现这一点,我想我应该分享我在阅读 @BoP 的答案后一段时间的认识 - 随着代码库规模的增长,我希望 linter 做的事情变得越来越困难,以至于难处理。
如果您开始尝试以我在问题中所示的方式包含
.c
文件,事情会变得有点复杂,因为您可以有一个常量 - 在我们的例子中为 MY_NUMBER
- 在原始文件中声明,并且在包含的文件中使用。这是有效的 C,如上所示。
但是 - 如果您只获取包含的文件(我的问题中的
library.c
),并与其余代码隔离地查看它,您不知道哪些代码可以包含该 .c
文件。 它可以是您计算机上的任何源代码。 linter 显然无法扫描您的整个计算机,因此问题很棘手,并且没有 linter 可以有效地完成我想要的事情。
这个故事的寓意 - 正确使用 C。