【问题标题】:How does preprocessor make that expansion (define macro found in included header file )预处理器如何进行扩展(定义包含的头文件中的宏)
【发布时间】:2014-06-06 15:27:51
【问题描述】:

我有一个包含常量 F_CPU 的头文件,我使用宏保护

header.h

#ifndef F_CPU
#define F_CPU  1000000UL
#endif

和 source.c 文件

#define F_CPU 16000000UL
#include "header.h"

第一个宏(在c文件中)如何扩展尚未包含的值?

【问题讨论】:

  • 我读到了“预处理器重新扫描”,但不明白。

标签: c scope macros include c-preprocessor


【解决方案1】:

.c 文件中的第一个#define 是宏定义,在这个地方完全合法。宏定义不限于包含的文件——它们也可能出现在 .c 文件中。

【讨论】:

    【解决方案2】:

    使用预处理器的 -E 选项来跟踪发生的情况。您在 source.c 的第一行定义了 F_CPU 宏,然后当包含头文件时,由于#ifndef 保护,头文件中的宏定义不会发生。请注意,您的代码中没有宏扩展。使用宏时会发生扩展。

    【讨论】:

      猜你喜欢
      • 2020-09-18
      • 1970-01-01
      • 2018-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      相关资源
      最近更新 更多