头文件

头文件中的ifndef/define/endif是干什么用的?

我是研究僧i 提交于 2020-03-02 07:31:50
例如:要编写头文件test.h 在头文件开头写上两行: #ifndef _TEST_H #define _TEST_H//一般是文件名的大写 ············ ············ 头文件结尾写上一行: #endif 大概是以前没有学好吧,对这里不是很理解,为什么要用这些呢?刚才上网查了查,借鉴了点高手的,自己总结了一点,就写在这里了,有什么错误之处,请大侠们指出 1.比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。 例如: 假设你的工程里面有4个文件,分别是a.cpp,b.h,c.h,d.h。 a.cpp的头部是: #include "b.h " #include "c.h " b.h和c.h的头部都是: #include "d.h " 而d.h里面有class D的定义。 这样一来, 编译器编译a.cpp的时候,先根据#include "b.h "去编译b.h这个问题,再根据b.h里面的#include "d.h ",去编译d.h的这个文件,这样就把d.h里面的class D编译了; 然后再根据a.cpp的第二句#include "c.h ",去编译c.h,最终还是会找到的d.h里面的class D,但是class D之前已经编译过了,所以就会报重定义错误。

Linux C编程如何查看函数引用的头文件

允我心安 提交于 2020-03-02 07:15:09
有时候,当我们调用一个函数时,却不知道它的头文件是哪些,man 工具可以帮助我们。 Tips: man 和 whatis配合使用效果最好 比如: 查看open函数需要哪些头文件: 1. 终端直接输入 man open,出现如下信息,并不是我们想要的结果 2. 这时候,我们需要利用whatis命令辅助,因为man查找open时出现多条信息,默认显示的是第一条,利用wahtis 查看open函数,发现第二条信息是我们需要的。 3. 再次利用man工具,这时候输入man 2 open,即查找第二条信息,下图红色方框中即为open函数需要引用的头文件 来源: oschina 链接: https://my.oschina.net/u/3783667/blog/1625557

C++中头文件、源文件之间的区别与联系

若如初见. 提交于 2019-11-30 17:17:02
.h头文件和.cpp文件的区别 疑惑1: .h文件能够编写main函数吗? 实验: 编写test.h文件,里面包含main函数 若直接编译g++ test.h -o test,通过file命令 file test,得到如下结果test: GCC precompiled header (version 013) for C++ ———test文件是预编译头文件 推测:.h文件不能单独生成.o文件 疑惑2 :.h文件中声明和定义的变量和函数是如何与.cpp文件结合的? 实验: 编写test.h文件,里面包含一个变量定义以及函数定义,编写test.cpp文件包含该头文件,通过g++ -E test.cpp -o test.i生成预编译文件,打开test.i文件发现,上面包含了头文件中变量的定义以及函数的定义,就像平时我们可以不写.h文件,只写.cpp文件一样,把所有的声明和定义都放在了一个.cpp文件中。 test.h #ifndef _TEST_H #define _TEST_H int var = 1; void func { } #endif test2.h #ifndef _TEST2_H #define _TEST2_H #include "test.h" #endif test.cpp #include "test.h" #include "test2.h" int main

C Primer Plus 第9章 函数 9.4 多源代码文件程序的编译

拈花ヽ惹草 提交于 2019-11-30 04:51:09
9.4.1 UNIX 首先假定UNIX系统下安装了标准的UNIX C 编译器cc。文件file1.c和file2.c中包含有C的函数。下面的命令将把这两个文件编译在一起并生成可执行文件a.out; cc file1.c file2.c 另外还将生成两个目标文件file1.o和file2.o。如果随后只更改了file1.c而没有改变file2.c,可以使用以下命令编译第一个文件并将其链接到第二个文件的目标代码: cc file1.c file2.o 在UNIX系统下有一个make命令可以自动管理多文件程序,本处不对此深入讨论。 9.4.2 LINUX 首先假定Linux系统下安装了GNU C 编译器gcc。文件file1.c和file2.c中包含有C的函数。下面的命令将把这两个文件编译在一起并生成可执行文件a.out; gcc file1.c file2.c 另外还将生成两个目标文件file1.o和file2.o。如果随后只更改了file1.c而没有改变file2.c,可以使用以下命令编译第一个文件并将其链接到第二个文件的目标代码: gcc file1.c file2.o 9.4.3 DOS命令行编译器 大多数DOS命令行编译器的工作机制同UNIX系统下的cc命令类似。一个不同之处在于DOS系统下目标文件的扩展名是.obj而不是.o。而且有些编译器并不生成目标代码文件