gcc:警告:';使用';忽略属性
我正在用-O2标志编译我的程序,我看到变量的属性被忽略了。这是为什么?我如何强制它接受该属性gcc:警告:';使用';忽略属性,c,gcc,C,Gcc,我正在用-O2标志编译我的程序,我看到变量的属性被忽略了。这是为什么?我如何强制它接受该属性 extern const int my_var __attribute__((used)); // but my_var is not actually // used in this file, but I'd
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
\uuuu attribute_uuu((uuu used_uuu))
仅在静态对象或函数定义上有意义,并告诉编译器发出定义,即使它似乎根本没有被引用,在这种情况下,它通常会被完全优化。使用外部链接定义的对象将永远不会被优化(可能在整个程序模式下或由链接器/LTO进行优化除外)。但你的用法甚至不是一个定义;它是一个外部对象的声明
如果您的目标确实是强制对象文件包含对此外部符号的引用,即使它未被使用,您可以执行以下操作:
extern const int my_var;
static const int *const dummy __attribute__((__used__)) = &my_var;
这会创建一个(无用的)对my\u var
的引用,而该引用永远无法优化。\uuuu属性(使用的)(\uu))
仅在静态对象或函数定义上有意义,并告诉编译器发出定义,即使它看起来根本没有被引用,在这种情况下,它通常会被完全优化。使用外部链接定义的对象将永远不会被优化(可能在整个程序模式下或由链接器/LTO进行优化除外)。但你的用法甚至不是一个定义;它是一个外部对象的声明
如果您的目标确实是强制对象文件包含对此外部符号的引用,即使它未被使用,您可以执行以下操作:
extern const int my_var;
static const int *const dummy __attribute__((__used__)) = &my_var;
这会创建一个(无用的)对my\u var
的引用,永远无法优化