首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C语言头文件组织与包含原则

如非特殊说明,文中“源文件”指 * .c文件,“头文件”指 *.h文件,“引用”指包含头文件。 一、头文件作用 C语言里,每个源文件是一个模块,头文件为使用该模块的用户提供接口。..."C"修饰的变量和函数将按照C语言方式编译和连接,否则编译器将无法找到C函数定义,从而导致链接失败。...「【注2】#pragma once的可移植性」 #ifndef由C/C++语言标准支持,不受编译器任何限制;而#pragma once仅由编译器提供保证,存在可移植性等问题。...「【注3】extern "C"」 C++语言在编译时为实现函数重载,会结合函数名、参数数目及类型信息而生成一个中间函数名。...C语言中不支持extern "C"声明,在.c文件中包含extern "C"时会出现编译语法错误。 当然编译器也可以为其他语言提供链接说明。

5.2K32
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C语言---头文件

    声明一下:以下源文件就是.c文件,头文件就是.h文件。 编程规范规定,头文件里面不能include其他文件,只能在源文件中include使用到的头文件,防止头文件重复包含。...假如我有头文件a.h和b.h,a.h中定义了一个结构体数据类型,而我在b.h中是要使用这个数据类型的,一般情况我会直接在b.h这个头文件包含a.h。...这样就可以正常使用了,如果头文件包含头文件的话,只在源文件中包含,这样能使用吗?会不会报错? 例如:源文件mian.c包含头文件a.h和b.h,头文件b.h中需要引用a.h中的数据结构类型。...SRU_S类型并没有在b.h中定义,也没有包含有定义此结构体的文件。然后我们在main.c中使用b.h中的结构。.../a.out sb.b: 1 sb.sa.a: 99 如果我们main.c中的头文件包含a.h和b.h的位置调换一下,先包含b.h再包含a.h。

    4K20

    头文件包含问题

    /blog.csdn.net/humanking7/article/details/79299045 ---- 先占个坑-后补 以前自己搭建起来的一个稍微大一点的项目,就会发现一些当初架构起来的问题,头文件包含乱用...,导致后期分外蛋疼,我遇到大致两种问题: 头文件全部包含,使得预编译会剔除某个头文件,导致结果:编译单个源文件没有问题,整体进行链接时,会发现找不到剔除的头文件定义的类或者变量; 接着,就把这个头文件的...#include"BB.h"写到#ifndef _AA_H_ /#define _AA_H_前面,这样到会导致下一个问题,头文件嵌套深度太深。...解决方法:头文件中#include的头文件尽量的少,不能太互相交融(这需要开始定义框架时,想清楚变量之间的关系和信息传递的方式),尽量把#include头文件写到源文件(cpp文件中)。

    1.8K10

    C语言头文件使用总结

    o( ̄▽ ̄)ブ C语言头文件 C语言头文件一般包含了函数声明,宏定义,常量等代码。我们在使用#include引用头文件。可以被多个c文件引用,避免了重复代码,减少了错误。让代码更加规范。...A simple practice in CC++ 程序中,建议把所有的常量、宏、系统全局变量和函数原型写在头文件中,在需要的时候随时引用这些头文件。...我们平时使用的时候又怎么用呢? #include 这种形式是引用系统文件,在系统目录下搜索此头文件。...但是这样并不标准,标准规定,包含标准头文件或系统头文件时应使用尖括号,包含自定义头文件时可使用双引号。...公共头文件 在程序代码中,经常很多c文件会引用一些相同的头文件,这个时候,我们就可以定义一个包含这些相同头文件头文件common.h。

    1.5K20

    C语言头文件j解析

    一、头文件作用 C语言里,每个源文件是一个模块,头文件为使用该模块的用户提供接口。接口指一个功能模块暴露给其他模块用以访问具体功能的方法。 使用源文件实现模块的功能,使用头文件暴露单元的接口。..."C"修饰的变量和函数将按照C语言方式编译和连接,否则编译器将无法找到C函数定义,从而导致链接失败。...「【注2】#pragma once的可移植性」 #ifndef由C/C++语言标准支持,不受编译器任何限制;而#pragma once仅由编译器提供保证,存在可移植性等问题。...「【注3】extern "C"」 C++语言在编译时为实现函数重载,会结合函数名、参数数目及类型信息而生成一个中间函数名。...C语言中不支持extern "C"声明,在.c文件中包含extern "C"时会出现编译语法错误。 当然编译器也可以为其他语言提供链接说明。

    2K88

    C++编程常用头文件及其包含函数汇总

    是标准的C++头文件,任何符合标准的C++开发环境都有这个头文件。 ...当使用时,相当于在C中调用库函数,使用的是全局命名空间,也就是早期的C++实现;当使用的时候,该头文件没有定义全局命名空间,必须使用namespace std...  #include   是C++里面的模板类 “集合”的头文件  set是C++标准库中的一种关联容器。...得到以ASCII码表示的时间 asctime  得到字符串表示的时间 ctime  得到指定格式的时间 strftime  #include  地区化: 本类别的函数用于处理不同国家的语言差异...地区控制 地区设置 setlocale  数字格式约定查询 国家的货币、日期、时间等的格式转换 localeconv  以上是用于原博主编程使用,属于不完整版本,完整版本请见:  C/C++常用头文件及函数汇总

    1.6K00

    为什么C语言会有头文件

    前段时间一个刚转到C语言的同事问我,为什么C会多一个头文件,而不是像Java和Python那样所有的代码都在源文件中。...我当时回答的是C是静态语言很多东西都是需要事先定义的,所以按照惯例我们是将所有的定义都放在头文件中的。事后我再仔细想想,这个答案并不不能很好的说明这个问题。...其实这个认识是错误的,C语言并没有规定include只能包含头文件,include的本质是一个预处理指令它主要的工作是将它后面的相关文件整个拷贝并替换这个include语句,比如下面一个例子 //add.cpp...其实针对所有的变量、类、函数可以都在统一的头文件中声明,但是这么做又带来一个问题,如果我要看它的实现怎么办,那么多个文件我不可能一个个的找吧。...C语言编译过程 在上面我基本上回答了为什么需要一个头文件,但是本质的问题还是没有解决,为什么像Python这类动态语言也有对应模块、多文件,但是它不需要像C那样要先声明才能使用?

    2.2K50

    C语言头文件防卫式声明

    C语言一般提供三种预处理功能:宏处理、文件包含、条件编译。头文件防卫式申明中会用到条件编译中 #ifndef、#define、#endif 的用法。所以,首先价绍下条件编译。...main() {    cout<<g_head1<<endl;    //1    cout<<g_head2<<endl;    //2    return 0; } 随着项目增大或者其他需求,可能出现头文件包含...,例如头文件 head2.h 中包含头文件 head1.h,头文件 head2.h 如下: #include "head1.h"; int g_head2 = 2; 此时编译就会出现重复定义的错误,这是因为源文件....cpp 包含头文件 head1.h、head2.h" ,head2.h 中也包含 head1.h头文件,所以head1.h 定义的 g_head1 被定义两次。...更多案例可以go公众号:C语言入门到精通

    1.5K2519

    google C++编程风格指南之头文件包含顺序

    google C++编程风格对头文件包含顺序作出如下指示: (1)为了加强可读性和避免隐含依赖,应使用下面的顺序:C标准库、C++标准库、其它库的头文件、你自己工程的头文件。...不过这里最先包含的是首选的头文件,即例如a.cpp文件中应该优先包含a.h。首选的头文件是为了减少隐藏依赖,同时确保头文件和实现文件是匹配的。...如果先包含A.h就可以发现隐藏依赖,所以各种规范都要求自身的头文件放在第一个,就能发现隐藏依赖。解决办法就是在A.h中包含B.h,而不是在A.c中再包含。...我们看到《Google C++ 编程风格指南》倡导原则背后隐藏的目的是: (1) 为了减少隐藏依赖,源文件应该先包含其对应的头文件(本文称之为首选项)。...不过我觉得《Google C++ 编程风格指南》的顺序:C标准库、C++标准库、其它库的头文件、自己工程的头文件,在最前面漏了一项:操作系统级别的头文件

    2.7K10

    如何编写自己的C语言头文件

    一些初学C语言的人,不知道头文件(*.h文件)原来还可以自己写的。只知道调用系统库 函数时,要使用#include语句将某些头文件包含进去。其实,头文件跟.C文件一样,是可以自己写的。...头文件是一种文本文件,使用文本编辑器将代码编写好之后,以扩展名.h保存就行了。头文件中一般放一些重复使用的代码,例如函数声明,变量声明,常数定义,宏的定义等等。...当使用#include语句将头文件引用时,相当于将头文件中所有内容,复制到#include处。...常根据它所在的头文件名来命名,例如,如果头文件的文件名叫做stc15w.h,那么可以这样使用: #ifndef _STC15W_H_ #define _STC15W_H_ //代码部分 #...使用引号“”时,首先搜索工程文件所在目录,然后再搜索编译器头文件所在目录;而使用尖括号时,刚好是相反的搜索顺序。 假设我们有两个文件名一样的头文件stc15w.h,但内容却是不一样的。

    3.6K20
    领券