C语言学习笔记(2):引用头文件所使用的符号区别

C语言引用头文件使用的符号有两种,以头文件stdio.h为例:

(1)#include <stdio.h>

(2)#include “stdio.h”

这两种引用方式是存在不同的。

第一种引用方式,编译器仅在标准库头文件中进行匹配;

第二种引用方式,编译器先在工程目录下进行匹配,如果没有,再到标准库头文件中查找。

这里进行了测试,应用VC++6.0,新建文件,首先是主文件Test.c:

#include <child.h>

void main()
{
    Test();
}

然后,为了简化过程,只建立一个头文件,并直接在头文件内部放入函数实体,child.h:

#include <stdio.h>

void Test()
{
    printf("Hello World!\n");
}

嗯!程序报错,错误原因:Cannot open include file: ‘child.h‘: No such file or directory.文件child.h未找到。

然后主文件改为:

#include "child.h"

void main()
{
    Test();
}

程序正常编译,输出结果:Hello World!

很好的说明了两种引用方式的不同。

然而,如果这时,再次将主文件引用方式改回:#include <stdio.h>,原来应该报错的程序居然顺利运行了。。。(原因不知道啊,可能是编译器的缺陷,或者编译器自动优化了吧)。针对这一情况,采用VS2015重新重复上述操作过程,不会出现VC++6.0中本应报错的程序通过运行的情况。

所以,编程时,系统本身存在的头文件最好用<>来引用,用户自定义的头文件必须用""来引用。

时间: 2024-08-07 00:10:26

C语言学习笔记(2):引用头文件所使用的符号区别的相关文章

Go语言学习笔记(五)文件操作

加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 文件读取 os.File 封装了文件相关操作 type File File代表一个打开的文件对象. func Create(name string) (file *File, err error) Create采用模式0666(任何人都可读写,不可执行)创建一个名为name的文件,如果文件已存在会截断它(为空文件).如果成功,返回的文件对象可用于I/O:对应的文件描述符具有O_RDWR模式.如果出错,错误底层类

C语言 Include指令(引用头文件)

#include "one.h" #include "two.h" int main(int argc, const char * argv[]) { one(); two(); return 0; }

【酷熊科技】工作积累 ----------- Unity3D / c 语言 使用 Stringbuilder 引用头文件 using System.Text

使用 StringBuilder Unity3D / c 语言 使用 Stringbuilder 引用头文件 using System.Text 简述StringBuilder和String的区别? String是字符串常量.  StringBuffer是字符串变量 ,线程安全. StringBuilder是字符串变量,线程不安全.  String类型是个不可变的对象,当每次对String进行改变时都需要生成一个新的String对象,然后将指针指向一个新的对象,如果在一个循环里面,不断的改变一个

R语言学习笔记

參考:W.N. Venables, D.M. Smith and the R DCT: Introduction to R -- Notes on R: A Programming Environment for Data Analysis and Graphics,2003. http://bayes.math.montana.edu/Rweb/Rnotes/R.html 前言:关于R 在R的官方教程里是这么给R下注解的:一个数据分析和图形显示的程序设计环境(A system for data

Linux 程序设计学习笔记----动手编写makefile文件

Befroe Beginning. 之前定了暑假的plan ,关于Linux的书籍现在在看的是ALP和Linux高级程序设计(杨宗德)第三版.在计划中的是Linux高级环境编程. 现在开始关于Linux程序设计的第一篇学习笔记. 本来打算把名字写成教程,不过觉得自己完全是新手在自学,还是写学习笔记比较负责和适合. 希望可以一起学习进步. 引入 首先我们假设这样一个场景.我们有一个程序包含了三个文件,分别是源码文件main_plus,c和function_plus.c以及头文件mydefine_p

JavaScript--基于对象的脚本语言学习笔记(一)

1.两种嵌入js的方式 使用javascript前缀构建url:<a href="javascript:alert('运行JavaScript..')">运行js</a> js脚本放在<style></style>之间: <style type="text/javascript"> alert("运行JavaScript..") </script> 2.如果没有声明变量直接使

C语言学习笔记frist---输入两个数比较大小

C#学习中,问道艰辛,今自C学起,第一个函数学习:输入两个数比较大小,仅作练习: #include "stdafx.h" #include<stdio.h> // 包含stdio.h头文件 int max(int, int); // 函数声明 int main(){ int a,b; // 声明两个整型变量 printf("input two integer:");// 以空格为分隔 scanf("%d %d",&a,&

Perl语言学习笔记 9 正则表达式处理文本

1.替换 s/PATTERN/REPLACE/; #返回是否替换成功的布尔值 可以使用捕获变量,如:s/(\w)/$1/ 匹配失败则不做任何处理 2.定界符 对于没有左右之分的定界符,重复三次即可,如:s///.s### 对于有左右之分的定界符,需使用两对,一对包含模式,一对包含替换字符串,这两对可以不一样,如:s{}{}.s[]{}.s<>[] 3.可选修饰符 /g可进行全局替换,替换所有匹配到的字符串,如:s/ / /g /s:使得 . 匹配所有字符 /i:大小写无关 4.绑定操作符 $f

Unix文件系统学习笔记之二: 文件描述符、inode和打开文件表

Unix文件系统学习笔记之二: 文件描述符.inode和打开文件表 系统盘上数据的布局 文件系统无非是关于数据在磁盘上的组织以及存储空间管理的,为此,首先需要知道磁盘上数据的总体布局方式.以Unix为例,最重要的一张表如下: Unix 进程管理中和用户文件.io 最相关的数据结构:usr 数据结构 The procstructure does not record information related to file access.  However the userstructure con