GCC 对 C 语言的扩展及相关编程技巧
1. 不返回的函数
在编程中,有些函数可能不会返回,比如函数中总是调用exit()函数。这时,程序员可以使用noreturn关键字标记该函数,让编译器知晓这一情况。示例代码如下:
__attribute__ ((noreturn)) void foo (int val) { /* ... */ }编译器了解到该函数不会返回后,就能进行额外的优化。需要注意的是,这种函数返回类型只能是void。
2. 分配内存的函数
若一个函数返回的指针不会与现有内存产生别名(即指向同一内存地址),通常是因为该函数新分配了内存并返回其指针,此时可以使用malloc关键字标记该函数,编译器会进行相应优化。示例如下:
__attribute__ ((malloc)) void * get_page (void) { int page_size; page_size = getpagesize ( ); if (page_size <= 0) return NULL; return malloc (page_size); }3. 强制调用者检查返回值
warn_unused_result属性并非用于