[小技巧] gcc attribute error 属性小试

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[小技巧] gcc attribute error 属性小试相关的知识,希望对你有一定的参考价值。

gcc __attribute__  里有一个属性是 error 能够用于编译时报错。


參考:

https://gcc.gnu.org/onlinedocs/gcc-4.3.0/gcc/Function-Attributes.html

error ("message")
If this attribute is used on a function declaration and a call to such a functionis not eliminated through dead code elimination or other optimizations, an errorwhich will include message will be diagnosed. This is usefulfor compile time checking, especially together with __builtin_constant_pand inline functions where checking the inline function arguments is notpossible through extern char [(condition) ? 1 : -1]; tricks. While it is possible to leave the function undefined and thus invokea link failure, when using this attribute the problem will be diagnosedearlier and with exact location of the call even in presence of inlinefunctions or when not emitting debugging information.       

写了一个简单的演示样例:

extern void foo(void) __attribute__((error("build failed"))); 

#define FOO 0
int main(void)
{
	if(FOO == 0)
		foo();

	return 1;
}


这里因为 FOO == 0 推断成立,所以会在编译时候直接报以下的错误:

/tmp/helloworld.c: In function ‘main‘:
/tmp/helloworld.c:7:6: error: call to ‘foo‘ declared with attribute error: build failed

这里文件名称/行号和错误的信息 "build failed" 都会输出。

另外。内核的 BUILD_BUG() 这个宏也是用了GCC这个属性。








以上是关于[小技巧] gcc attribute error 属性小试的主要内容,如果未能解决你的问题,请参考以下文章

C 语言编程 — GCC Attribute 语法扩展

各个层次的gcc警告

GCC的__attribute__ ((constructor))和__attribute__ ((destructor))

databinding错误Error:(11) Error parsing XML: duplicate attribute

gcc之__attribute__简介及对齐参数介绍

等效于 Visual C++ 中 gcc 的 __attribute__ 格式