来自linux内核代码
struct gpio_desc {
struct gpio_chip *chip;
unsigned long flags;
/* flag symbols are bit numbers */
#define FLAG_REQUESTED 0
#define FLAG_IS_OUT 1
#define FLAG_EXPORT 2 /* protected by sysfs_lock */
#define FLAG_SYSFS 3 /* exported via /sys/class/gpio/control */
#define FLAG_ACTIVE_LOW 6 /* value has active low */
#define FLAG_OPEN_DRAIN 7 /* Gpio is open drain type */
#define FLAG_OPEN_SOURCE 8 /* Gpio is open source type */
#define FLAG_USED_AS_IRQ 9 /* GPIO is connected to an IRQ */
#define FLAG_IS_HOGGED 11 /* GPIO is hogged */
/* Connection label */
const char *label;
/* Name of the GPIO */
const char *name;
};
将定义放入结构体中的原因是什么?
答案 0 :(得分:5)
使用#define
放置它们并不重要(只要它在文件中比在第一次使用时更高)。很可能这些常量仅在该结构中使用,所以它被放在那里从逻辑上讲它们更容易找到。它们本来可以放在它们使用的第一个位置之上,但是由于类似的目的它们被组合在一起。
答案 1 :(得分:2)
除了尝试将它们定义在第一次使用点附近之外,它没有意义。
当编译器实际看到代码时,预处理器将剥离这些代码。
在这个特定的例子中,对于标志使用typedef& en enum并使用该枚举来声明该字段会更好。
答案 2 :(得分:0)
没有影响。 但在示例中,为了便于阅读,他们在声明的变量附近维护/添加。
他们想要使用那些" #define"对于变量"无符号长标志;"。
下面是一个简单的例子,通过声明" #define"来证明对类/结构没有影响。内部。
//gcc 4.9.3
#include <stdio.h>
struct gpio_desc {
#define FLAG_REQUESTED 0
} test;
int main()
{
printf("%d",FLAG_REQUESTED);
}
输出为零。