C语言头文件<>和""的区别
头文件和源文件在本质上没有任何区别。 只不过一般:后缀为 .h 的文件是头文件,内含函数声明、宏定义、结构体定义等内容。后缀为 .c 的文件是源文件,内含函数实现,变量定义等内容。而且是什么后缀也没有关系,只不过编译器会默认对某些后缀的文件采取某些动作。这样分开写成两个文件是一个良好的编程风格。
简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:
①预处理阶段
②词法与语法分析阶段
③ 编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各 个目标文件 (.obj文件)
④连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关 的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了文件格 式信 息。(生成.exe文件)
3.比方说 在aaa.h里定义了一个函数的声明,然后在aaa.h的同一个目录下建立aaa.c , aaa.c里定义了这个函数的实现,然后是在main函数所在.c文件里#include这个aaa.h 然后我就可以使用这个函数了。 main在运行时就会找到这个定义了这个函数的aaa.c文件。这是因为:main函数为标准C/C++的程序入口,编译器会先找到该函数所在的文件。假定编译程序编译myproj.c(其中含main())时,发现它include了mylib.h(其中声明了函数void test()),那么此时编译器将按照事先设定的路径(Include路径列表及代码文件所在的路径)查找与之同名的实现文件(扩展名为.cpp或.c,此例中为mylib.c),如果找到该文件,并在其中找到该函数(此例中为void test())的实现代码,则继续编译;如果在指定目录找不到实现文件,或者在该文件及后续的各include文件中未找到实现代码,则返回一个编译错误.其实include的过程完全可以“看成”是一个文件拼接的过程,将声明和实现分别写在头文件及C文件中,或者将二者同时写在头文件中,理论上没有本质的区别。以上是所谓动态方式。对于静态方式,基本所有的C/C++编译器都支持一种链接方式被称为Static Link,即所谓静态链接。在这种方式下,我们所要做的,就是写出包含函数,类等等声明的头文件(a.h,b.h,...),以及他们对应的实现文件(a.cpp,b.cpp,...),编译程序会将其编译为静态的库文件(a.lib,b.lib,...)。在随后的代码重用过程中,我们只需要提供相应的头文件(.h)和相应的库文件(.lib),就可以使用过去的代码了。相对动态方式而言,静态方式的好处是实现代码的隐蔽性,即C++中提倡的“接口对外,实现代码不可见”。有利于库文件的转发.
其实,两者之间是没有多大差别的,只是为了提高查找效率而区分的。
当你包含一个头文件时,编译时,需要找到那个头文件,使用这种方式,编译器查找的时候,会在编译器的安装目录的标准库中开始查找,""这种方式,会在当前的工程所在的文件夹开始寻找,也就是你的源程序所在的文件夹。
有的编译器,要求十分严格,不能混用,有的就可以。
PS:我copy的,版权属于原作者
“”会先在你C文件所在路径中查找头文件,找不到才会到软件库文件中找
头文件#include <> :表示引用标准库头文件,编译器会从系统配置的库环境中去寻找
#include "":一般表示用户自己定义使用的头文件,编译器默认会从当前文件夹中寻找,如果找不到,则到系统默认库环境中去寻找。
linux下C和C++默认库环境路头文件径:/usr/include
C语言中<>和“”有什么区别
C语言中<>和“”的区别如下:1、<>先去系统目录中找头文件,如果没有在到当前目录下找。所以像标准的头文件 stdio.h和 stdlib.h等用这个方法。2、""首先在当前目录下寻找,如果找不到,再到系统目录中寻找。 这个用于include自定义的头文件,让系统优先使用当前目录中定义的。c语言的符号和引用问...
C++中调用逻辑运算符(即&&,||,!)所需要的头文件是什么?
不需要头文件,这是运算符。就如同 + - * \/ ++ -- & 等等,都不需要头文件,拿来就用。
单片机C语言头文件
对于C语言的头文件来说,通常情况下是使用#include+文件名语句进行引用。格式如下:include <stdio.h> 或 include "MyLib.h"使用 #include时,使用引号与尖括号的意思是不一样的。使用引号””时,首先搜索工程文件所在目录,然后再搜索编译器头文件所在目录。所以对于用户自定义头文件来说,通常使用双...
c++#include''与<>有什么区别?
从标准来看,预处理指令 # include < h-char-sequence > new-line 和 # include " q-char-sequence " new-line 用于在源文件中查找并包含头文件。指令 # include < h-char-sequence > new-line 会查找并包含由 < 和 > 分隔符间指定序列唯一标识的头文件,并将该指令替换为头文件的全部内容。
c语言 头文件
对于自己定义的函数,首先,肯定的是,你至少需要在一个C文件中定义它,否则链接会出错。当你想在任何一个文件中使用的时候,你只需要让这个文件包函数声明所在的头文件即可。具体来说:a.h中声明了了 int a( int x);a.c中实现这个函数,需要有类似代码 include "a.h"\/\/...其他代码 int a(i...
c语言如何输出指针所指向的值
需要准备的材料分别有:电脑、C语言编译器。1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。2、在test.cpp文件中,输入C语言代码:int q = 10;int* p = &q;printf("%d\\n", *p); 。3、编译器运行test.cpp文件,此时成功输出了指针p所指向的变量q的值。
c++语言中include<QDebug>是什么意思
c++语言中include<QDebug>是让程序的输出你想要的变量。c++语言中include<QDebug>这句话是引入QDebug这个头文件,这个头文件的作用就是可以自由的输出一些变量的值到屏幕上,一般用于调试和验证阶段用的。真正在产品应用时会去掉,因为这样的代码运行起来会增加运行的时间,影响效率,比如一部手机,开机只要...
C语言中#include<malloc.h>有何作用?何时要用
C语言中的#include头文件主要用于引入malloc函数。malloc函数的作用是向系统申请指定大小的内存空间。在编写程序时,特别是在使用动态内存分配的场景下,如建立链表、数组动态扩展等,往往需要用到malloc函数。例如,在建立一个链表时,可以使用如下代码:struct LNode *Init_L() \/\/建立链表 { struct L...
C语言的中gets(s)和scanf("%s",s)的区别
gets 字符串中可以有空白符号,遇到回车终止输入。scanf("%s")遇到第一个空白符号或者回车停止输入
关于c语言数据结构的头文件和Elemtype类的一些问题
1.<stdio.h>一般写C语言程序都要加这个头文件,因为它包含scanf()、printf()等控制输入和输出的函数 <time.h>包含的主要是和时间相关的函数 <string.h>主要包含用来拷贝或比较字符串的函数 <stdlib.h>主要包含这几个函数:malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、...