[小技巧] 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这个属性。

时间: 2025-01-04 07:12:29

[小技巧] gcc attribute error 属性小试的相关文章

[小技巧] gcc 编译选项-###

原文译至:http://elinux.org/GCC_Tips 的一小部分. -###编译选项用于查看编译的过程 gcc -### <你的命令行的其他部分放在这里> 你运行的GCC其是一系列工具的集合.通过这个参数,gcc能生成(但并不执行)一系列的命令用于完成你输入的任务.你可以看到在gcc编译下面的细节,什么库会被使用?-mcpu设成什么值?都在输出的结果中. 你可以将输出定向到一个文件并执行这个文件里的命令来编译程序,这样你可以更好地了解gcc是如何调用汇编器和链接器的. Reading

UWP开发中的重复性静态UI绘制小技巧 1

介绍 在UWP界面实现的过程中,有时会遇到一些重复性的.静态的界面设计.比如:画许多等距的线条,画一圈时钟型的刻度线,同特别的策略排布元素,等等. 读者可能觉得这些需求十分简单,马上就想到了通过for循环之类来实现.只需要在Loaded事件里添上这些元素就好了. 但这样可能存在一些问题——如果这些UI元素只是静态的,是装饰性的——虽然code-behind不用白不用,但为了这些纯静态元素将代码逻辑变得臃肿似乎略有不妥. 我们将就这些问题为读者们介绍一些重复性的静态界面绘制小技巧. Shape.S

积累的VC编程小技巧之属性页

1.属性页的添加: 创建对话框的类,该类要从CpropertyPage继承:然后在要添加该对话框为属性页的类(头文件)里创建CpropertySheet类的一个对象m_tabsheet和新创建的对话框类的对象m_skatch:最后,在.cpp文件里的OnInitDialog()之类的函数里实现如下代码: m_tabsheet.Create(this, WS_CHILD | WS_VISIBLE, 0); //使选项卡的按钮在下面 if(m_tabsheet.m_hWnd) m_tabsheet.

YbSoftwareFactory 代码生成插件【十九】:实体类配合数据库表字段进行属性扩展的小技巧

实体类通常需要和数据库表进行了ORM映射,当你需要添加新的属性时,往往同时也需要在数据库中添加相应的字段并配置好映射关系,同时可能还需对数据访问组件进行重新编译和部署才能有效.而当你开始设计一个通用数据访问组件后,因为项目需求的不同和需求的不断变化演变,很难不能保证不会再添加额外的属性和字段.特别是项目部署运行后,添加一个属性和字段带来的额外维护的工作量可能要远远超过对代码进行调整的工作量.本文提供了属性字段扩展的一种思路,在满足核心字段可通过实体类强类型进行访问的同时,还可通过C# 4.0提供

《转》linux 使用小技巧

本文介绍了平时累积的Linux使用技巧. 文件的属性 文件的隐藏属性 lsattr : 列出文件的隐藏属性chattr : 修改文件的隐藏属性 [[email protected] ~]# chattr [+-=][ASacdistu] FileName+ : Add one attribute- : Remove one attribute= : Set to be the only attributes that the files have重要选项 a:只能追加文件的内容,但不能修改或删除

程序员都会的 35 个 jQuery 小技巧

收集的35个 jQuery 小技巧/代码片段,可以帮你快速开发. 1. 禁止右键点击 1 $(document).ready(function(){ 2 $(document).bind("contextmenu",function(e){ 3 return false; 4 }); 5 }); 2. 隐藏搜索文本框文字 1 Hide when clicked in the search field, the value.(example can be found below in t

必须学会使用的35个Jquery小技巧

query 与JS相比较,方便了许多,语法上也简便了不少,下面是Jquery常用的技巧,下面Jquery使用的方法在各个网站中都会使用到. 收集的35个 jQuery 小技巧/代码片段,可以帮你快速开发. 1. 禁止右键点击 1 2 3 4 5 $(document).ready(function(){     $(document).bind("contextmenu",function(e){         return false;     }); }); 2. 隐藏搜索文本框

iOS 知识-常用小技巧大杂烩

iOS 知识-常用小技巧大杂烩 1,打印View所有子视图 po [[self view]recursiveDescription] 2,layoutSubviews调用的调用时机 * 当视图第一次显示的时候会被调用 * 当这个视图显示到屏幕上了,点击按钮 * 添加子视图也会调用这个方法 * 当本视图的大小发生改变的时候是会调用的 * 当子视图的frame发生改变的时候是会调用的 * 当删除子视图的时候是会调用的 3,NSString过滤特殊字符 // 定义一个特殊字符的集合 NSCharact

每个程序员都会的 35 个 jQuery 小技巧

1 收集的35个 jQuery 小技巧/代码片段,可以帮你快速开发. 2 1. 禁止右键点击 3 $(document).ready(function(){ 4 $(document).bind("contextmenu",function(e){ 5 return false; 6 }); 7 }); 8 2. 隐藏搜索文本框文字 9 Hide when clicked in the search field, the value.(example can be found belo