怎样让函数在被编译或被链接时警告用户?¶
@2010-07-08 新版功能: 创建
使用了 mktemp 的程序在不是特别老的 libc 环境下编译时都会有类似的警告:
warning: the use of `mktemp' is dangerous, better use `mkstemp'
这个警告是在链接时产生的,实际上是 GNU 连接器的一个扩展,对函数库中的某个函数 如果过时了可以采用这种方式来提醒用户。此外,在编译时也可产生相应的警告信息。 具体实现见下面的代码例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdlib.h>
void __attribute__((warning("use of dummy is obsoleted"))) dummy1(void)
{
return;
}
int main()
{
char template[] = "/tmp/test_XXXXXX";
mktemp(template);
dummy1();
dummy2();
return 0;
}
|
1 2 3 4 5 6 7 8 9 10 11 | #define link_warning(symbol, msg) \
static const char __evoke_link_warning_##symbol[] \
__attribute__ ((used, section (".gnu.warning." #symbol))) \
= msg;
void dummy2(void)
{
return;
}
link_warning(dummy2, "use of dummy2 is obsoleted");
|
编译运行如下:
$ gcc test.c lib.c
test.c: In function 'main':
test.c:13: warning: call to 'dummy1' declared with attribute warning: use of dummy is obsoleted
/tmp/.private/liuzx/ccyBD0XN.o: In function `main':
test.c:(.text+0x45): warning: use of dummy2 is obsoleted
test.c:(.text+0x36): warning: the use of `mktemp' is dangerous, better use `mkstemp'