gcc:警告:'used'属性被忽略

时间:2014-05-15 02:24:33

标签: c gcc

我正在用-O2标志编译我的程序,我看到变量的属性被忽略了。为什么这样,我怎么强迫它接受属性?

extern const int my_var __attribute__((used)); // but my_var is not actually 
                                               // used in this file, but I'd 
                                               // like it to be included in 
                                               // the symbol table

warning: 'used' attribute ignored

1 个答案:

答案 0 :(得分:5)

__attribute__((__used__))仅对static对象或函数定义有意义,并告诉编译器发出定义,即使它似乎根本没有被引用,其中它通常会完全优化。使用外部链接定义的对象永远不会被优化(除了可能在整个程序模式或链接器/ LTO中)。但你的用法甚至不是一个定义;它是外部对象的声明。

如果您的目标确实是强制您的目标文件包含对此外部符号的引用,即使它未被使用,您可以执行以下操作:

extern const int my_var;
static const int *const dummy __attribute__((__used__)) = &my_var;

这会创建一个(无用的)对my_var的引用,该引用永远无法优化。