I am now read some c code. And is not very clear about the “#define someting” expression.
For example, I saw this code:
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
I take attention to the “__attribute__(x)”. since in other header file , the “__attribute__(x)” is defined with no value, but how it take effect in the enum “cairo_path_op” define?
This is for portability reasons.
__attribute__()is a GCC extension for modifying various properties and behavior of functions, variables, types, etc.If a non-GCC-compatible compiler tries to compile code that uses this extension, it won’t able to do so and will throw a syntax error.
In order to avoid this, the author of the code makes the preprocessor replace this keyword with nothing if
__GNUC__is not defined (i. e. if the compiler is not a GCC-compatible one), so that the code builds on a bigger variety of platforms.