关于库中已弃用的全局变量使用的 GCC 消息

GCC message on deprecated global variable usage from a library

我有一个带有全局变量的 C 静态库。 我的目标是在程序中使用库中的全局变量时,在编译时向用户打印一条消息。

我试图将变量标记为 __attribute__((deprecated))。但是即使设置了 -Werror,我也需要用户能够构建。

因此我尝试添加 #pragma GCC diagnostic warning "-Wdeprecated-declarations",但它似乎只在图书馆内活跃,如果用户 link 使用图书馆则不会。

您可以使用链接器代替,如在例如ninjalj's blog.

这是一个简短的例子:

$ cat myvar.c
int myvar = 0;
static const char myvar_warning[] __attribute__((section(".gnu.warning.myvar"))) =
  "myvar is deprecated";
$ cat main.c
extern int myvar;
int main() {
  return myvar;
}
$ gcc main.c myvar.c
/tmp/cc2uM5Vx.o: In function `main':
tmp.c:(.text+0x6): warning: myvar is deprecated