今天在 TLPI 看到这个写法,於是来纪录一下。
__attribute__((xxxx))
语法__attribute__((noreturn))
通常是处理 error 的 function,处理完之後直接 exit()
所以在写的时候已经确定他不会 return 了
以下是一个例子:
void err_exit(const char *err_msg);
void
err_exit(const char *err_msg)
{
fprintf(stderr, "%c", err_msg);
exit(1);
}
他 print 出错误讯息之後就会 exit 了,
所以绝对不会 return
因为不会 return 所以 compiler 对於这个点有个优化的空间,
但前题是:写程序的人必须要先告诉 compiler 这个 function 有不会 return 的特性
而以下就要说明要如何告诉 compiler 这个点
__attribute__((xxxx))
语法例:
int foo() __attribute__((xxxx)); /* 要把 xxxx 替换掉 */
代表的就是 foo()
这个 function 有 xxxx
这个特性 (attribute)
compiler 可以针对这个 xxxx
的 attribute 来进行优化
至於 xxxx
实际上可以填上哪些 attribute ,
可参考这个网页
__attribute__((noreturn))
noreturn
就是其中一个 attribute
他代表的是这个 function 不会 return
所以刚刚的例子可以改成:
void err_exit(const char *err_msg) __attribute__ ((noreturn));
void
err_exit(const char *err_msg)
{
fprintf(stderr, "%c", err_msg);
exit(1);
}
这样写的话,compiler 就知道他可以完全不考虑这个 function 要如何 return 的问题
可以针对这点进行一点优化
接续昨天 根据规格书,我们要用永丰提供的四组hash值拼出hash id 可以看出,hash id会...
前面实作初步的Learned Index并进行测试,今天我们要来实作出Learned Index的完...
学习html就是在学习如何使用标签,所以我现在要来了解各个标签的意思以及如何使用。 1.< t...
从手机到智慧音箱,在不同装置上要考量到的情形皆有差异。 这篇文章中将先介绍Google助理可回应的...
会议中的每个人都是可以掌控会议的节奏,因为谁也不知道控场的人哪一天也自己不受控制。因应疫情,所以先从...