POSIX C`警告:变量‘;表’;设置但未使用`

POSIX C`警告:变量‘;表’;设置但未使用`,c,linux,posix,C,Linux,Posix,我写了一个代码,一切正常,编译和工作没有问题,当我编译它与GCC 4.7.2开关-Wall我得到以下警告: warning: variable ‘tables’ set but not used [-Wunused-but-set-variable] 我知道这不是问题,但为什么会出现?看起来不合逻辑: const unsigned char *tables; char *loc = setlocale(LC_ALL, 0); setlocale(LC_ALL, loc); tables = p

我写了一个代码,一切正常,编译和工作没有问题,当我编译它与GCC 4.7.2开关
-Wall
我得到以下警告:

warning: variable ‘tables’ set but not used [-Wunused-but-set-variable]
我知道这不是问题,但为什么会出现?看起来不合逻辑:

const unsigned char *tables;
char *loc = setlocale(LC_ALL, 0);
setlocale(LC_ALL, loc);
tables = pcre_maketables();

我的变量已设置并已使用。有什么想法吗?

从编译器的角度来看,以下两者的行为没有区别:

const unsigned char *tables;
char *loc = setlocale(LC_ALL, 0);
setlocale(LC_ALL, loc);
tables = pcre_maketables();


编译器将优化赋值并翻译后者。

除了赋值之外,我不知道它在哪里使用。你只给它赋值(你设置了它)。但是你没有用它做任何事情,所以gcc想知道如果你不打算用它做些什么,为什么还要费心分配给它。把变量
tables
分配给NULL。我知道了。我将只使用该函数。我忘了我已将其设置为与
pcre_exec
一起使用,然后我将
0
用作
默认字符表
char *loc = setlocale(LC_ALL, 0);
setlocale(LC_ALL, loc);
pcre_maketables();