2017-01-27 10 views
0

У меня есть статическая библиотека C с глобальными переменными. Моя цель - распечатать сообщение во время компиляции для пользователя, когда в его программе используются глобальные переменные из библиотеки.Сообщение GCC об использовании устаревших глобальных переменных из библиотеки

Я попытался отметить переменные как __attribute__((deprecated)). Но мне нужно, чтобы пользователь мог строить, даже если установлен -Werror.

Поэтому я попытался добавить #pragma GCC diagnostic warning "-Wdeprecated-declarations", но он только кажется активным в библиотеке, если пользователь не связывается с библиотекой.

ответ

1

Вместо этого можно использовать компоновщик, как описано, например, 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 tmp.c tmp2.c 
/tmp/cc2uM5Vx.o: In function `main': 
tmp.c:(.text+0x6): warning: myvar is deprecated