Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何抑制阴影“索引”警告?_C_Compiler Warnings_Suppress Warnings_String.h - Fatal编程技术网

C 如何抑制阴影“索引”警告?

C 如何抑制阴影“索引”警告?,c,compiler-warnings,suppress-warnings,string.h,C,Compiler Warnings,Suppress Warnings,String.h,我维护了一个跨平台的C代码库,在一些平台上,如Fedora和Mageia,我得到了以下编译器错误: warning: declaration of 'index' shadows a global declaration 基于,我理解这是因为一些基于BSD的C实现在string.h中定义了一个非标准索引函数,这意味着每当我声明索引变量时,就会出现此警告。我向您保证,我没有任何全局索引变量 我知道我可以避免命名任何索引,但它是一个语义上有用的名称,所以我最终会到处使用它。我知道我也可以抑制这个警

我维护了一个跨平台的C代码库,在一些平台上,如Fedora和Mageia,我得到了以下编译器错误:

warning: declaration of 'index' shadows a global declaration
基于,我理解这是因为一些基于BSD的C实现在string.h中定义了一个非标准索引函数,这意味着每当我声明索引变量时,就会出现此警告。我向您保证,我没有任何全局索引变量

我知道我可以避免命名任何索引,但它是一个语义上有用的名称,所以我最终会到处使用它。我知道我也可以抑制这个警告,例如在GCC中使用-Wno shadow,但我不希望全局禁用其他有用的编译器警告

那么我该如何解决这个问题呢?也就是说,是否有可能检测到平台是否具有索引功能,并仅在那里禁用警告,或者如果它存在,我如何重新定义它?

检查声明索引的标题,它可能被包装在一些if或ifdef中,您可以利用这些if或ifdef来阻止它被声明

还可能有一个编译器pragma,您可以使用它禁用出现在特定行上的警告。至少clang有这样一点:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshadow"
// code that produces warning
#pragma clang diagnostic pop
如果用gcc替换clang,我认为gcc也有相同的功能。旧版本可能不支持推送,我不确定这两个版本的警告开关是否相同。如果它与pragma GCC一起工作,那么clang还应该识别pragma,这样就不需要重复

作为记录,我没有通过包含和定义int-index得到这个警告;在Debian或OS X上使用-Wshadow使用clang或gcc…您确定您的索引来自?在使用XCode 5的OS X上,它是复数形式。

检查声明索引的标头,它可能被包装在一些if或ifdef中,您可以利用这些if或ifdef来阻止声明它

还可能有一个编译器pragma,您可以使用它禁用出现在特定行上的警告。至少clang有这样一点:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshadow"
// code that produces warning
#pragma clang diagnostic pop
如果用gcc替换clang,我认为gcc也有相同的功能。旧版本可能不支持推送,我不确定这两个版本的警告开关是否相同。如果它与pragma GCC一起工作,那么clang还应该识别pragma,这样就不需要重复

作为记录,我没有通过包含和定义int-index得到这个警告;在Debian或OS X上使用-Wshadow使用clang或gcc…您确定您的索引来自?在使用XCode 5的OSX上,它是复数形式。

这是一个GCC错误

选项-Wshadow不再在声明隐藏函数声明时发出警告,除非前者声明函数或函数指针,因为这在实际代码中是常见且有效的情况

这在Mageia 4 GCC 4.8.2或Fedora 19 GCC 4.8.1和20 GCC 4.8.2中不再是一个问题,但我不知道除了更改变量名之外,还有什么干净的解决方案可以避免警告,可能是更具体的问题。

这是一个GCC错误

选项-Wshadow不再在声明隐藏函数声明时发出警告,除非前者声明函数或函数指针,因为这在实际代码中是常见且有效的情况


在Mageia 4 GCC 4.8.2或Fedora 19 GCC 4.8.1和20 GCC 4.8.2中,这不再是一个问题,但我不知道除了更改变量名以外,还有什么干净的解决方案可以避免警告,可能是更具体的问题。

我不再在OSX中看到它,因为我相信Xcode 5。我也没有在基于Debian的Linuxes中看到过它,我相信从Xcode 5开始,我就不再在OSX中看到它了。我也没有在基于Debian的Linuxes中看到它。