zoukankan      html  css  js  c++  java
  • C 语言的 GCC 扩展

    GNU 编译器(GCC)提供了很多 C 语言扩展,编译器会使用该信息生成更高效的机器代码。

    内联函数

    static inline __attribute__ ((always_inline)) int foo(void) { /* ... */ }


    避免内联

    __attribute__ ((noinline)) int foo(void) { /*...*/ }


    纯函数

    __attribute__ ((pure)) int foo(int val) { /* */ }

    返回值只受函数参数或 nonvolatile 全局变量影响。

    常函数

    __attribute__ ((const)) int foo(int val) { /*...*/ }

    常函数是一种严格的纯函数。常函数不能访问全局变量,参数不能是指针类型。因此,常函数的返回值只和值传递的参数值有关。

    没有返回值的函数

    __attribute__ ((noreturn)) void foo(int val) { /*...*/ }

    分配内存的函数

    __attribute__ ((malloc)) void *copy()
    {
       int size = 10;
       return malloc(10);
    }

    强制调用方检查返回值

     1 #include <stdio.h>
     2 
     3 __attribute__ ((warn_unused_result)) int foo()
     4 {
     5     return 0;
     6 }
     7 
     8 int main()
     9 {
    10     foo();
    11     return 0;
    12 }


    把函数标识为“Deprecated(已废弃)”

    __attribute__ ((deprecated)) void foo(void) { /*...*/ }


    把函数标识为已使用

    static __attribute__ ((used)) void foo(void) { /*...*/ }


    把函数或参数标识为未使用的

    int foo(int __attribute__ ((unused)) value) { /*...*/}


    对结构体进行紧凑存储(pack)

    struct __attribute__ ((packed)) foo { ... };

    packed 属性告诉编译器一个类型或变量应该在内存中紧凑存储,使用尽可能少的空间,可能不依赖对齐需求。如果在结构体(struct)或联合体(union)上指定该属性,就需要对所有变量进行紧凑存储。如果只是对某个变量指定该属性,就只会紧凑存储该特定变量。

  • 相关阅读:
    IOS debug网络PonyDebugger 实践篇
    基于S7-200的PLC对里程轮(增量式码盘)解码的应用
    SICP 习题 (1.14)解题总结
    TQ210裸机编程(2)——LED流水灯
    DP练习(初级):ZigZag
    java 十六进制数的转换
    Oracle DB 执行表空间时间点恢复
    html中文乱码(解决办法)
    html的列表
    MySQL的模糊搜索
  • 原文地址:https://www.cnblogs.com/jingyg/p/5398476.html
Copyright © 2011-2022 走看看