将#define置于结构中

时间:2016-10-21 16:40:24

标签: c

来自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;
};

将定义放入结构体中的原因是什么?

3 个答案:

答案 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);
}

输出为零。