我维护了一个跨平台的 C 代码库,在一些平台上(Xcode 4、Red Hat 派生的发行版,如 Fedora 和 Mageia),我收到以下编译器错误:
warning: declaration of 'index' shadows a global declaration
基于这个答案,我知道这是因为一些基于 BSD 的 C 实现定义了一个非标准index
函数,string.h
这意味着每当我声明一个index
变量时都会出现这个警告。我向你保证,我没有任何全局index
变量。
我知道我可以避免命名任何东西index
,但它是一个语义上有用的名称,所以我最终在所有地方都使用它。我知道我也可以抑制此警告,例如通过-Wno-shadow
在 GCC 中使用,但我宁愿不全局禁用其他有用的编译器警告。
那么我该如何解决这个问题呢?也就是说,是否有可能检测平台是否具有该index
功能并仅在该处禁用警告,或者如果存在,我该如何重新定义它?