C语⾔常见问题(⼀)——头⽂件<>与””的区别
⽬录
⼀、#include<>与””的区别
C语⾔包含头⽂件有两种写法#include <stdio.h>和#include "stdio"(#include后⾯可以不空格),两种写法的区别如下:
1. #include <;头⽂件>  : 编译器只会从系统配置的库环境中去寻头⽂件,不会搜索当前⽂件夹。通常⽤于引⽤标准库头⽂件。
2. #include "头⽂件"  : 编译器会先从当前⽂件夹中寻头⽂件,如果不到则到系统默认库环境中去寻。⼀般⽤于引⽤⽤户⾃⼰定义使
⽤的头⽂件。
⼆、举例
1.我们新建⼀个项⽬xx,只包含main.cpp⼀个⽂件
可以看到,⽆论是#include"stdio.h"还是#include<stdio.h>程序都能正常运⾏
解析:1)使⽤#include<stdio.h>添加头⽂件时,编译器到标准库头⽂件中查,发现stdio.h头⽂件,将其复制到当前⾏;2)⽽使⽤
#include”stdio.h”添加头⽂件时,编译器先到当前项⽬所在的⽂件夹中查stdio.h头⽂件,发现没有这个头⽂件,于是编译器到系统默认库环境中去寻,发现stdio.h头⽂件,将其复制到当前⾏。这⾥展开的stdio.h头⽂件和#include<stdio.h>展开的头⽂件是同⼀个。
2.在xx项⽬中添加⼀个头⽂件stdio.h,并使⽤#include”stdio.h”
编译器报错,原因是printf未声明。
解析:使⽤#include”stdio.h”添加头⽂件时,编译器先到当前项⽬所在的⽂件夹中查stdio.h头⽂件,发现⽤户⾃定义的stdio.h头⽂件,于是编译器将其复制到当前⾏。这⾥展开的头⽂件是⽤户⾃定义的头⽂件,⽤户⾃定义的stdio.h头⽂件没声明printf函数,所以当然会报错。
3.再往stdio.h⽂件⾥添加#include<stdio.h>
程序就能正常运⾏了。
三、附: 初学者常⽤标准库头⽂件简介
1.stdio.h
定义了输⼊输出操作,包括标准格式化输⼊输出(scanf、printf),⽂件格式化输⼊输出(fscanf、fprintf),字符字符串输⼊输出(getchar、getsput、char、)等等。
⼀般情况下,C程序都会包含输⼊输出操作,因此这是最常⽤的头⽂件。此外涉及⽂件的操作也常常需要包含stdio.h头⽂件。
2.stdlib.h
定义了⼏个通⽤功能,包括动态内存管理(malloc、free等),随机数⽣成(rand、srand),与环境的通信,整数算术,搜索,排序和转换。
涉及链表的操作,需要该头⽂件。
3.math.h
定义了三⾓函数、反三⾓函数、指数函数、对数函数、开平⽅sqrt()、开⽴⽅cbrt()、取绝对值fabs()等常见数学运算函数。
//注意:fabs参数为double类型,⽽abs参数为int类型。fabs是求实数的绝对值,abs是求整数的绝对值
4.stdbool.h
定义了bool类型。
在C99标准之前,C语⾔没有bool类型。C99标准中新增的头⽂件stdbool.h中引⼊了bool类型,与C++中的bool兼容。
此外C99新增的关键字_Bool可以表⽰布尔类型。
5.string.h
定义了操纵字符串和数组的函数。包括下列⼏个函数:
char * strcpy ( char *destin, char *source);//复制字符串
char * strncpy ( char *dest, char *src, size_t n);//将字符串src中最多n个字符复制到字符数组dest中
char * strcat ( char *destin, char *source);//连接字符串
int strcmp ( char *str1, char *str2);//看ASCII码,str1>str2,返回值 > 0;两串相等,返回0
c语言和c++区别size_t strlen ( const char *s);//求字符串的长度,从字符串的⾸地址开始到遇到第⼀个'\0'停⽌计数
void swab ( char *from, char *to, int nbytes);//交换字节
以上只是对部分C标准库头⽂件的简单描述,由于篇幅限制,很多函数声明、变量声明、宏定义未能展开来讲。此外除了上述5个头⽂件,C语⾔标准库头⽂件还有很多,这⾥仅指出了初学者经常⽤到的⼏个头⽂件。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。