我目前正在学习 C 编程语言(来自Java),我对如何定义宏感到困惑。
为了让其他代码使用宏,头文件必须拥有它。但是如果我在头文件中定义宏,那么源文件就无法使用它。我是否必须在两者中定义它,还是必须#include源文件自己的头文件?
答案 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)
您可以在标题或实现文件中定义它,但它需要对您使用它的翻译单元可见。
如果仅在一个实现文件中使用,请仅在该文件中定义它。
如果有更多文件使用宏,请在标题中定义它,并在需要宏的任何地方包含该标题。