pax*_*blo 25
这是你做的事情:
int index;
int main (void) {
int index;
....
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它的警告是index内部main()实际上隐藏了你之前声明过的全局内容main().
它会警告您,当本地定义处于"活动状态"时,您无法获得全局定义.现在这不一定是一个问题(因此它只是一个警告),它是完全有效的C,但你需要意识到可能的后果.
顺便说一句,一些C实现(基于BSD)定义一个
index函数在string.h其也可能会引起问题.不推荐使用此函数,它不会出现在C标准中(strchr改为使用),但如果您正在运行(例如)Mac OS或OpenBSD(或者甚至是某些组合的Linux),它可能会导致问题.#define设置,我相信).
有几种方法可以解决这个问题(如果需要).
第一个可能是首选的:不要使用全局变量.是的,没错,摆脱它们.他们很少需要,所以不要让我过来打你四处:-)
我见过的第二种方法是确保它们"打包".假设您确实需要全局变量(绝不是确定的,请参见上一段),创建一个包含它们的结构,如下所示:
myglobs.h:
struct sMyGlobs {
int index;
// all other globals.
};
extern struct sMyGlobs myGlobs;
myglobs.c:
#include "myglobs.h"
struct sMyGlobs myGlobs;
main.c:
#include <stdio.h>
#include "myglobs.h"
int main (void) {
myGlobs.index = 42;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这样做的好处在于,显然你指的是全局,并且它们永远不会被隐藏,除非你做一些像定义你自己的局部变量一样的东西myGlobs.