c语言如何避免重复包含头文件?

比如我有三个源文件a.cpp,b.cpp,c.cpp,都因为printf函数需要用到stdio.h头文件,而且在a中需要调用b,c两个文件,如果使用文件包含#include"b.cpp"是不是会重复包含了stdio.h头文件了,如何避免这个情况。
源.cpp:
#include <stdio.h>
#include"源1.cpp"
#include"源2.cpp"
int main()
{
int a = 3, b = 4;
printf("before swap:a=%d,b=%d\n", a, b);
swap1(a, b);
printf("in main:after swap1:a=%d,b=%d\n", a, b);
swap2(a, b);
printf("in main:after swap2:a=%d,b=%d\n", a, b);
}
源1.cpp
#include <stdio.h>
extern void swap1(int a, int b)
{
int temp = a;
a = b;
b = temp;
printf("in swap1:after swap1:a=%d,b=%d\n", a, b);
}
#include <stdio.h>
extern void swap2(int& a, int& b)
{
int temp = a;
a = b;
b = temp;
printf("in swap2:after swap2:a=%d,b=%d\n", a, b);
}

#include 通常不会包含 .cpp 文件,如果包含的话,一般仅会包含如 static 的函数这样不会因为多次包含而导致链接问题的。
为了防止重复包含,头文件中都会有相应的处理,比如加上
#ifndef _STDIO_H_
#define _STDIO_H_
// 真正的头文件内容

#endif
这样在多次包含的时候,因为已经定义了 _STDIO_H_,所以第二次包含的内容会被忽略。
比较新的 C++ 编译器也支持 #pragma once,这样只要在头文件开头写上这一句,编译器就会在处理头文件的时候不包含多次了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-05-19

    #include原则上只能包含头文件,不能包含cpp文件,否则可能出现重复定义的问题。

    stdio.h等标准库头文件中已经含有防止重复包含的预编译指令,多次包含这些文件也不会出现任何问题。

追问

那请问这段代码有什么问题啊。

追答

第一条已经说过,你应该分别编写源1.h和源2.h两个头文件,然后在main()函数所在的源文件中包含这两个头文件,而不是直接包含源1.cpp和源2.cpp两个文件。

追问

那我如果想在把函数放在独立源文件中那怎么办(作业要求)

追答

你需要编写源1.h和源2.h两个头文件,在其中写入函数声明。

相似回答