__attribute__((noreturn))的用法
来源:互联网 发布:域名注册后怎么建站 编辑:程序博客网 时间:2024/05/18 22:43
外文地址:http://www.unixwiz.net/techtips/gnu-c-attributes.html
__attribute__ noreturn 表示没有返回值
This attribute tells the compiler that the function won't ever return, and this can be used to suppress errors about code paths not being reached. The C library functions abort() and exit() are both declared with this attribute:
这个属性告诉编译器函数不会返回,这可以用来抑制关于未达到代码路径的错误。 C库函数abort()和exit()都使用此属性声明:
extern void exit(int) __attribute__((noreturn));extern void abort(void) __attribute__((noreturn));
Once tagged this way, the compiler can keep track of paths through the code and suppress errors that won't ever happen due to the flow of control never returning after the function call.
In this example, two nearly-identical C source files refer to an "exitnow()" function that never returns, but without the __attribute__tag, the compiler issues a warning. The compiler is correct here, because it has no way of knowing that control doesn't return.
$ cat test1.cextern void exitnow();int foo(int n){ if ( n > 0 ){ exitnow();/* control never reaches this point */} else return 0;}$ cc -c -Wall test1.ctest1.c: In function `foo':test1.c:9: warning: this function may return with or without a value
But when we add __attribute__, the compiler suppresses the spurious warning:
$ cat test2.cextern void exitnow() __attribute__((noreturn));int foo(int n){ if ( n > 0 ) exitnow(); else return 0;}$ cc -c -Wall test2.cno warnings!
- __attribute__((noreturn))的用法
- __attribute__ noreturn 用法
- __attribute__ noreturn
- __attribute__ noreturn
- __declspec(noreturn)的用法
- __declspec(noreturn)的用法
- __attribute__ ((noreturn))得使用
- __attribute__((pack))的用法
- 函数属性__attribute__的用法
- __attribute__的一些小用法
- __attribute__ ((packed)) 的作用 用法
- __attribute__用法
- __attribute__ 用法
- __attribute__宏与link脚本的用法
- C语言中__attribute__的用法
- GNU C __attribute__ 用法
- __attribute__用法小结
- __attribute__ ((packed))用法
- NOIP2016普及组复赛第一题——买铅笔
- opencv-阈值化处理
- React入门记事本小项目(一)
- 图像平移、缩放、旋转、插值 Matlab实现
- 如何成为优秀的驱动开发工程师
- __attribute__((noreturn))的用法
- java csv 导出操作
- c#----App.config文件进行数据库连接
- 学生信息表 成绩表+12章练习
- 润乾报表重复值列的两种计算排名方法
- 警告C4995解决办法 warning C4995: '_vsnprintf': name was marked as #pragma deprecated
- 高性能队列——Disruptor
- ImageLoaderUtils模板
- c++求第二大数