文章

cJSON阅读第一天:attribute、define

1. __attribute__ 的使用

section used

18年写过一篇文章介绍used section的使用,见attribute-used-section的简单应用

visibility

gcc __attribute__关键字举例之visibility

1
2
3
4
5
6
7
/* visibility用于设置动态链接库中函数的可见性,将变量或函数设置为hidden,则该符号仅在本so中可见,在其他库中则不可见。*/
#if (defined(__GNUC__) || defined(__SUNPRO_CC) || defined (__SUNPRO_C)) && defined(CJSON_API_VISIBILITY)
#define CJSON_PUBLIC(type)   __attribute__((visibility("default"))) type
#else
#define CJSON_PUBLIC(type) type
#endif
#endif

2. 宏的使用

  • 宏后面不接任何东西

    例如,__WINDOWS__后面是空白的,是为了在使用的时候能够使用第二行来表示第一行

    1
    2
    3
    4
    5
    6
    
    #if !defined(__WINDOWS__) && (defined(WIN32) || defined(WIN64) || defined(_MSC_VER) || defined(_WIN32)) /* 第一行 */
    #define __WINDOWS__
    #endif
    
    #ifdef __WINDOWS__ /* 第二行 */
    #endif
    

    还有的用法是:防止重复包含头文件。

    1
    2
    3
    4
    
    #ifndef XXX
    #define XXX
    ...
    #endif
    
本文由作者按照 CC BY 4.0 进行授权