我们可以在结构中放置宏吗?

时间:2014-04-07 06:20:46

标签: c

此代码取自Accessing SPI Devices in Linux

static struct spi_board_info
spi_stm32_flash_info__dongle = {
#if defined(CONFIG_SPI_SPIDEV)
.modalias = "spidev",
#endif
.max_speed_hz = 25000000,
.bus_num = 3,
.chip_select = 0,
.controller_data = &spi_stm32_flash_slv__dongle,
};

spi_stm32_flash_info__dongle是一个结构?

这里有什么好处?我们有没有其他insde结构?有什么意义'。;在变量之前?我知道 '。'用于访问结构元素,但在'。'之前没有任何内容。

2 个答案:

答案 0 :(得分:2)

  1. 宏是一种在编译之前编辑文本的方法,并且在编译器解析代码并找出诸如结构之类的东西之前进行处理。在这种情况下,编译代码时,modalias行将在那里或不在那里。

  2. 在这种情况下,.用于按字段名称初始化字段。它是用于此目的的特殊语法。

答案 1 :(得分:0)

{}的内容正在初始化结构的属性。

#ifdef块在结构中是完全合法的,因为编译器永远不会看到它;预处理器将保留块的内容或将其删除,具体取决于CONFIG_SPI_SPIDEV的状态。 Windows API对某些结构执行类似操作,使用#ifdef块添加或删除某些成员。