首页 > 代码库 > 瞎折腾--#include到底是什么意思
瞎折腾--#include到底是什么意思
很多人上了这么多年学,学了这么多年课,考了这么多年试,写了这么多年程序,到头来,问问你#include是什么意思,却只能简单的说说那是一个预处理命令。然后在深问一下,什么是预处理命令,然后就卡壳了。下面我们就来一起瞎折腾一下,看看#include背后的故事。
一般来说,我们都是#include <stdio.h>的,但是今天我不这样写。
先看看我的工程,我的Project中有三个文件,main.cpp ,Foo.txt, Foo.c。这里要看清楚了,我没有使用Foo.h,而是使用了Foo.txt。好了,废话不说了,先来看看Foo.txt里面的内容。
/* *FileName: Foo.txt,NOT Foo.h */ #ifndef foo_txt_ #define foo_txt_ #ifdef __cplusplus extern "C"{ #endif #define NUMBER (1+1*1) int Foo(void); #ifdef __cplusplus } #endif #endif //all the file
这是头文件,只是简单的声明了一下Foo这个函数。这个函数没有参数,有一个int类型的返回值。并且定义了一个宏。这个宏就是Foo的返回值。
下面看Foo.c,这个源文件只是简单的实现了Foo。下面是代码:
#include "Foo.txt" int Foo(void) { return NUMBER; }
最后一个文件是main.cpp,这个文件里面包含了main函数,简单的调用了一下Foo这个函数。下面是main.cpp的源代码:
#include <iostream> #include "Foo.txt" using namespace std; int main() { cout<<Foo()<<endl; return 0; }
好了,代码已经写完了,下面我们使用g++来编译一下,当然,你也可以使用任何编译器来编译这段代码,我使用的是g++,具体其他的编译器的方法大同小异:
g++ -Wall main.cpp foo.c -o main.exe
好了,无错误,无警告。运行正确,在控制台上输出了2:下面是截图:
其实#include只是简单的复制了头文件中的内容一次到源文件中。我们可以使用cpp命令来看看经过处理后的Foo.c。使用gcc输入:
cpp foo.c >foo.i
经过处理之后的文件如下:
# 1 "Foo.c" # 1 "<command-line>" # 1 "Foo.c" # 1 "Foo.txt" 1 # 13 "Foo.txt" int Foo(void); # 2 "Foo.c" 2 int Foo(void) { return (1+1*1); }
从上面Foo.i的文件中可以看出,#include只是将该复制的复制(函数的声明),该替换的替换(宏定义)。并没有做大多的处理。
好了,今天的解释就到这了,希望看完之后能够明白几个问题:
1.有关某些渣渣教科书喜欢#include "XXX.c",这样编译器却不会报错,但是不是一种好的方法。
2.问什么要在头文件的前面加上#ifndef。
3.为什么不能再头文件中给声明变量并赋值,例如:int number=10;
瞎折腾--#include到底是什么意思
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。