面试题答案
一键面试原理
#ifndef
:即if not defined
,它的作用是判断某个宏是否未定义。如果该宏未定义,那么后续的代码(直到与之匹配的#endif
)会被处理;如果宏已经定义,那么这部分代码会被跳过。#define
:用于定义一个宏。当#ifndef
判断宏未定义时,#define
语句会定义这个宏,这样下次遇到同样的#ifndef
判断时,由于宏已经被定义,后续代码就不会再被重复处理,从而避免了头文件的重复包含。#endif
:用于标记#ifndef
代码块的结束。
示例
假设项目结构如下:
- 项目根目录
- main.c
- include
- myheader.h
- src
- mysource.c
myheader.h
#ifndef MYHEADER_H
#define MYHEADER_H
// 这里放置头文件的内容,比如函数声明、结构体定义等
void myFunction();
#endif
mysource.c
#include "myheader.h"
#include <stdio.h>
void myFunction() {
printf("This is my function.\n");
}
main.c
#include "myheader.h"
#include <stdio.h>
int main() {
myFunction();
return 0;
}
在这个简单项目中,myheader.h
使用#ifndef
、#define
和#endif
组合确保了无论在mysource.c
还是main.c
中包含该头文件,其内容都不会被重复处理。