C语言#include还有些你不知道的事

C语言中的#include指令用于引入头文件,分为尖括号和双引号两种形式,分别用于标准库和自定义文件。预处理器会根据指定路径搜索头文件,并允许最多15层嵌套。使用#ifndef防止头文件重复包含,避免编译错误。同时,可以使用宏来动态选择包含的头文件。预处理器还能处理文本替换,如将#include的内容插入到源文件中。
摘要由CSDN通过智能技术生成

#include简介

在C语言中#include是preprocessor的一条指令,告诉预处理器将指定头文件的内容插入到预处理器命令的相应位置。

#include "xxx.h" 和 #include

有两种方式可以指定插入头文件:

#include 
#include "filename"

如果需要包含标准库头文件比如一些数学函数的原型等等,应该使用<>,如果需要包含自己程序所开发的源文件,应该使用""

这两种形式的#include行为是预处理器指定好的都是复制其他文件中的内容,区别在于搜索header文件时,二者的搜索路径不同,按照指定路径顺序搜索。

#include“xxx.h”搜索的路径覆盖了#include搜索的路径,但使用<>文件的路径是在标准include路径(关于这几个路径的搜索就不多说了),所以使用<>的效率更高。

在 #include 命令中使用宏

#include 命令也是可以使用宏的,例如

#ifdef        _DEBUG_
  #define       MY_HEADER       "blinky.h"
#else
  #define       MY_HEADER       "blinkyQP.h"
#endif

#include        MY_HEADER

这样在我们调试的时候可以根据_DEBUG_是否定义来确定包含哪些头文件,当然你都包含也可以,但是会有重复包含的问题,后面会说到。

嵌套的 #include 命令

通过#include命令插入的源文件本身也可以包含另一个 #include 命令,预处理器最多允许15层的嵌套包含,但这种现象会发生相同的一个文件被多次包含的情况,例如

//blinky.h
#include 
...

如果blinky.c文件如下所示,就会直接与间接的两次包含stdio.h。

//blinky.c
#include 
#include "blinky.h"
...

那么如何避免多次包含呢,我们可以采用常用的条件式编译的命令,例如

#ifndef blinkY_H_
#define blinkY_H_
/* ...实际的头文件blinky.h的内容写在这里... */
#endif  /* blinkY_H_ */

在创建一个头文件时,可以用#define指令为它定义一个唯一的标识符blinkY_H_。通过#ifndef指令检查这个标识符blinkY_H_是否已被定义,如果已被定义,则说明该头文件已经被包含了,就不要再次包含该头文件;反之,则定义这个标识符名称,以避免以后再次包含该头文件。

打印文本内容比较长

#include
int main(void)
{
    printf
    #include"tech.txt"//tech.txt的内容为("ID:TechDreamer");
    return 0;
}
//输出ID:TechDreamer

在预编译的时候,将#include文件的内容嵌入到当前所在位置,当文本内容比较长,直接复制在源代码里面会显得代码冗余不美观,可以使用这种方法,等价于

#include
int main(void)
{
    printf("ID:TechDreamer");
    return 0;
}

C语言中#include只能包含.h文件吗?

C语言中#include可以include .c这样使用吗?是不是没见过,其实这样是可以的。

从语法角度讲,include的意思就是从当前位置包含另外一个文件,从这点讲,include .c文件是可行的,c编译器完全能够正常处理。

那怎么样包含.c文件呢?因为本文主要是讲#include的用法有哪些,这个就暂时不说啦,感兴趣的可以去了解一下。

但是为什么不常见include .c文件?我们需要了解.c与.h文件功能的区别。一般来说.h文件提供接口,.c文件提供具体的实现,不一定要一一对应。如果一个.c文作包含其他模块对应的.h文件,而这个.c文件可能有一些结构,变量等与包含其他模块的实现(.c文件)重复了,会导致出错,所以一般不会使用,毕竟我们不写奇葩的代码。

声明:

本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include #include struct DATA { int ID; char name[4]; char sex[3]; int score; }; void paixu(int*,DATA*,int); int sishewuru(double); void func1(int*,int*,DATA*,int*,int,int,int,int);//统计男女比例 int func2(int*,int,DATA*);//查找考生序号 void print(); void main() { int length=0,i,yiben,erben,sanben,dazhuan,male[4],female[4]; int yi,er,san,si; char input; FILE* file=fopen("f1.txt","r"),*file1; if(file==NULL) { printf("No such file!\n"); return; } while(EOF!=fscanf(file,"%*[^\n]\n")) length++;//自动计算考生数罝ATA* data=(DATA*)malloc(length*sizeof(DATA)); int* pai=(int*)malloc(length*sizeof(int)); rewind(file); for(i=0;i='0'&&input<='4')) { printf("非法输入,请重新输入\n请输入:"); fflush(stdin); } else break; } getchar(); switch(input) { case '0': printf("\n一类本科招生线:%d\n二类本科招生线:%d\三类本科招生线:%d\\n高职高专招生线:%d\n",yi,er,san,si); printf("是否打印为文件?(y/n):"); if(getchar()=='y') { file1=fopen("各批次录取分数线.txt","w"); fprintf(file1,"一类本科招生线:%d\n二类本科招生线:%d\\n三类本科招生线:%d\n高职高专招生线:%d\n",yi,er,san,si); fclose(file1); } fflush(stdin); break; case '1': func1(male,female,data,pai,yiben,erben,sanben,dazhuan); printf("一类本科招生线男女比例:%d:%d\n",male[0],female[0]); printf("二类本科招生线男女比例:%d:%d\n",male[1],female[1]); printf("三类本科招生线男女比例:%d:%d\n",male[2],female[2]); printf("高职高专招生线招生线男女比例:%d:%d\n",male[3],female[3]); printf("是否打印为文件?(y/n):"); if(getchar()=='y') { file1=fopen("各批次录取男女比例.txt","w"); fprintf(file1,"一类本科招生线男女比例:%d:%d\n",male[0],female[0]);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值