公司做网站百度还是阿里,天津建设教育培训中心网,温州建设公司网站,沈阳定制网红小熊花的地方头文件的包含
本地⽂件包含 #include filename
查找策略#xff1a;先在源⽂件所在⽬录下查找#xff0c;如果该头⽂件未找到#xff0c;编译器就像查找库函数头⽂件⼀样在
标准位置查找头⽂件。
如果找不到就提⽰编译错误。
Linux环境的标准头⽂件的路径filename
查找策略先在源⽂件所在⽬录下查找如果该头⽂件未找到编译器就像查找库函数头⽂件⼀样在
标准位置查找头⽂件。
如果找不到就提⽰编译错误。
Linux环境的标准头⽂件的路径
1 /usr/include
VS环境的标准头⽂件的路径
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include
//这是VS2013的默认路径
库⽂件包含
1 #include filename.h
查找头⽂件直接去标准路径下去查
找如果找不到就提⽰编译错误。
这样是不是可以说对于库⽂件也可以使⽤ “” 的形式包含
答案是肯定的可以但是这样做查找的效率就低些当然这样也不容易区分是库⽂件还是本地⽂件 了。
总结 “”双引号 先去文件找找不到去标准头文件里面去找范围较大
直接去标准库文件里面去查找
分开定义的目的是效率比较高
———————————————————————————————————————————
如何防止头文件多次引入
这里就是头文件包含五次我们需要知道头文件是不能相互包含的 如何解决这个问题
#pragma()
这个是默认对齐数 #pragma once解决方式1
#pragma once 是一个编译器指令它告诉编译器在包含文件的任何地方只包含该文件一次即它实现了文件级别的重复包含保护。这个指令被广泛支持但并非所有编译器都必须遵守。 在 C 和 C 编程中头文件通常包含宏定义、函数原型和类声明等这些内容在被多个源文件包含时可能会被多次编译导致代码冗余和可能的冲突。
使用 #pragma once 可以避免这种情况。 当编译器遇到 #pragma once 指令时它会检查该文件是否已经被包含过。如果文件尚未被包含编译器将继续包含该文件并继续编译如果文件已经被包含编译器将忽略该文件不会重复包含。 这里有一个简单的例子 // header.h
#pragma once
// 一些宏定义和函数原型
#define MY_MACRO 1
void function();
// main.c
#include header.h
int main() {// 使用宏和函数printf(%d\n, MY_MACRO);function();// header.h 不会被重复包含#include header.h// 这里不会引起编译错误因为 header.h 已经被包含过了
}
在这个例子中header.h 文件中包含了 #pragma once 指令。当 main.c 文件包含 header.h 时#pragma once 确保了 header.h 中的内容不会因为多次包含而重复编译。因此即使 #include header.h 在 main.c 文件中被重复写了一次它也不会对 header.h 产生第二次包含的效果。 需要注意的是#pragma once 并不是 C 或 C 标准的一部分它的支持取决于具体的编译器。然而由于它非常简单且易于实现大多数现代编译器都支持这个指令。
#ifndef #define解决方式2 每个头⽂件的开头写
#ifndef __TEST_H__
#define __TEST_H__
//头⽂件的内容
#endif //__TEST_H__
什么意思呢也就是首先我们判断
1宏是否被定义没有则继续执行 2宏是否被定义定义了则不执行
补充说明 #ifdef 指令检查是否已经定义了某个宏。如果该宏已定义则执行 #ifdef 和相应的 #endif 指令之间的代码。#ifndef 指令检查是否没有定义某个宏。如果没有定义该宏则执行 #ifndef 和相应的 #endif 指令之间的代码。