c - #定义一个没有值的对象

标签 c typedef

我现在正在阅读一些 C 代码。并且对“#define someting”表达式不是很清楚。

例如,我看到了这段代码:

typedef enum cairo_path_op {
    CAIRO_PATH_OP_MOVE_TO = 0,
    CAIRO_PATH_OP_LINE_TO = 1,
    CAIRO_PATH_OP_CURVE_TO = 2,
    CAIRO_PATH_OP_CLOSE_PATH = 3
} __attribute__ ((packed)) cairo_path_op_t; /* Don't want 32 bits if we can avoid it. */


#ifndef __GNUC__
#define __attribute__(x)
#endif

我注意到“__属性__(x)”。因为在其他头文件中,“__属性__(x)”定义为没有值,但是它如何在枚举“cairo_path_op”定义中生效?

最佳答案

这是出于可移植性的原因。

__attribute__()是一个 GCC 扩展,用于修改函数、变量、类型等的各种属性和行为。

如果非 GCC 兼容编译器尝试编译使用此扩展的代码,它将无法执行此操作,并且会引发语法错误。

为了避免这种情况,代码作者让预处理器将此关键字替换为空 if __GNUC__未定义(即,如果编译器不是与 GCC 兼容的编译器),因此代码可以构建在更多种类的平台上。

关于c - #定义一个没有值的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14672667/

相关文章:

c - C 中的数字模式

android - 语句无效 'AVPacket'

c - 通过 ssh 替换并打开 stdin/stdout

c++ - 将 typedef 放置在使用类本身作为模板参数的类中是否有效?

c++ - size_t 是否保证是其中一种整数类型的别名类型?

c - 解析缺少条目的 csv 文件

c - IsDouble函数原型(prototype)语法错误&警告(数据定义没有类型或存储类)

c++ - typedef 一个现有的枚举类型,可能吗?

c - typedef 一个函数指针

c++ - Typedef C++ 中的位域/掩码