在C头文件中使用定义?

bgr*_*nks 0 c macros include c-preprocessor

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

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

Ern*_*ill 6

源文件实际上总是包含它们的"自己的"头文件 - 即,声明源文件中定义的函数的头.在实际定义函数之前声明函数是完全合法的并且通常是可取的:如果标题意外不匹配,您可能会遇到编译错误,这是一件好事.


EdH*_*EdH 6

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

通常设置为:

  #include "macros.h"

  ...

  printf("Macro value %d\n", MACRO_HERE(1) );
Run Code Online (Sandbox Code Playgroud)

在你的头文件中,macros.h

  #ifndef MACROS_H_
  #define MACROS_H_

  #define MACRO_HERE( n ) ( n + 1 )

  #endif
Run Code Online (Sandbox Code Playgroud)

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

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