在C头文件中使用定义?

时间:2012-02-24 21:43:23

标签: c macros include c-preprocessor

我目前正在学习 C 编程语言(来自Java),我对如何定义宏感到困惑。

为了让其他代码使用宏,头文件必须拥有它。但是如果我在头文件中定义宏,那么源文件就无法使用它。我是否必须在两者中定义它,还是必须#include源文件自己的头文件?

3 个答案:

答案 0 :(得分:6)

源文件虚拟始终包括其“自己的”头文件 - 即,声明源文件中定义的函数的头。在实际定义函数之前声明函数是完全合法的并且通常是可取的:如果标题意外不匹配,您可能会遇到编译错误,这是一件好事。

答案 1 :(得分:6)

首先#include本质上就像直接在文件中插入文件一样。它由编译器预处理器运行,该预处理器在编译器之前运行。 Google C预处理程序以获取更多信息...

通常设置为:

  #include "macros.h"

  ...

  printf("Macro value %d\n", MACRO_HERE(1) );

并在头文件中,macros.h

  #ifndef MACROS_H_
  #define MACROS_H_

  #define MACRO_HERE( n ) ( n + 1 )

  #endif

如果稍后有另一个包含macro.h的包含文件,则包装的#ifdef会阻止宏被重新定义

另请参阅:#pragma once(在许多编译器中也广泛使用)

答案 2 :(得分:3)

您可以在标题或实现文件中定义它,但它需要对您使用它的翻译单元可见。

如果仅在一个实现文件中使用,请仅在该文件中定义它。

如果有更多文件使用宏,请在标题中定义它,并在需要宏的任何地方包含该标题。