C语言高级知识锦集(一)

您所在的位置:网站首页 这一头那一头什么意思 C语言高级知识锦集(一)

C语言高级知识锦集(一)

#C语言高级知识锦集(一)| 来源: 网络整理| 查看: 265

漫谈头文件

头文件对于刚入门的新人来说是个陌生的东西,什么是头文件呢?它和我们写的.c文件有什么区别呢?这个问题对于我来说有段认识的过程

#include

早期我接触C语言第一件事就是hello world的程序。当时急于去了每个东西,对hello world每个部分都刨根问底,其中最让我困惑的莫过于头文件了。我问过C语言老师,他们说你理解成一个工具箱。我去问过学长,他们说是包括了一个头文件。我去百度过,百度说std是标准库,io是输入输出流,.h是文件的后缀。说的我都很迷糊。随着后续的深入了解,我在书里还看到了这些话 文件包含 我总结一下这段话里的干货

stdio.h是一个文件它一般存在标准系统目录(你安装编译器的目录,像VS之类的IDE会自动帮你安装编译器)include会把.h文件里的内容原封不动的搬到.c里去“”和的区别在于会找标准系统目录,而“”会优先找文件目录,换句话说自己写的.h用“”最快,标准库里的用最快 .h和.c的关系

我们经常会看见有同名的.c和.h仿佛是一对对情侣,出现的时候经常成双成对出现。那么这两个是什么关系呢?我个人的理解,有点像菜单和菜谱的关系。

菜单.h菜谱.c只需要写菜名和单价,是顾客点菜的函数的申明,全局变量的申明,一般调用函数的时候看.h厨师做菜需要的,写清楚做菜的步骤函数实现的部分,函数具体实现过程 那么同名.c一定要包含同名.h吗? 其实不必,如果.c中有用到.h的(比如宏定义申明,结构体申明等)则需要.c和.h一定要同名吗? 不需要,只是书写习惯。就像情侣装,不是所有情侣都爱穿情侣装,只不过是一个容易辨认的标志而已 头文件的格式

我们通常会见到很多头文件有着明显的格式

#ifndef在头文件里的的意义 #ifndef _INC_STDIO #define _INC_STDIO // code #endif

这个是摘抄于stdio.h里的代码,代码里的这三行简单的来说,是通过检测有没有这个宏来确定这个文件有没有被编译,以达同一个文件之编译一次的目的。 我们分开来解析一下,当第一次运行这个头文件的时候,第一行 #ifndef 这个宏展开就是 if no define翻译成中文就是如果你没有定义_INC_STDIO这么一拖玩意儿,那就定义一下_INC_STDIO这个玩意,然后就走一遍代码,最后的#endif是宏定义#ifndef的结束符号,由于宏定义没有大括号所以需要用#endif表示判断成功运行的代码部分。 第二次进入时,因为我们之前进去时候定义了_INC_STDIO这个玩意所以这里判断不成立,就会跳到#endif后面这样code里的代码只会被执行一遍,这就是这样写为什么能实现编译只会被编译一次。 那_INC_STDIO这么一坨东西我们可以根据不同的文件去定义不同。为防止我们重复,一般情况下会采用头文件大写(点用下划线表示)比如STDIO_H。

防止重复的偷懒写法 #pragma once

同样可以达成上述效果,不过很老的版本编译器可能不支持这种写法

__cplusplus宏意义 #ifdef __cplusplus extern "C" { #endif #ifdef __cplusplus } #endif

这两组宏也是常见的两兄弟。由于C++兼容C但是又有很多不同,所以在使用编译器的时候很容易混用gcc和g++。这就导致一些细节的地方和我们想象的不一样,好在g++编译器自带__cplusplus这个宏,当我们用gcc编译的时候这些东西会被忽略。当我们用g++编译的时候,我们会通过extern “C” {}把代码转换成C风格的,这样保证了混用编译器时出现和自己想象不一样的情况。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3