C++头文件中预编译宏的目的

C++头文件中预编译宏的目的

 

eg:

#ifndef _FACTORY_H_
#define _FACTORY_H_
......
#endif //~_FACTORY_H_

 

防止头文件被重复包含,导致变量或类型被重复定义

 

 

时间: 2024-10-27 08:09:36

C++头文件中预编译宏的目的的相关文章

解析VC中预编译头文件的深入分析_C 语言

一.为什么预编译头文件:预编译头的概念: 所谓的预编译头就是把一个工程中的那一部分代码,预先编译好放在一个文件里(通常是以.pch为扩展名的),这个文件就称为预编译头文件这些预先编译好的代码可以是任何的C/C++代码,甚至是inline的函数,但是必须是稳定的,在工程开发的过程中不会被经常改变.如果这些代码被修改,则需要重新编译生成预编译头文件.注意生成预编译头文件是很耗时间的.同时你得注意预编译头文件通常很大,通常有6-7M大.注意及时清理那些没有用的预编译头文件.也许你会问:现在的编译器都有

关于头文件是否参与编译的讨论

一.文章来由 写项目的时候发现了这个问题,又是一个比较底层的问题,首先说明,这篇文章只是我根据查阅的资料和做的实验提出的一个讨论,并不一定就是正确答案.因为这个问题网上众说纷纭,我很欢迎大家参与这个讨论,一起搞懂这个问题~~~ 二.问题的提出 问题就是... 2.1 问题1(主问题): 头文件是否真正参与编译? 先上一个网上的标准答案: .h的内容被插入到.c中,作为.c的内容被编译..h文件本身不直接参加编译. 据我理解,这句话就是说明了头文件不直接参与编译,是作为一个插入来理解. 也就是说:

OC中的宏 和 C中的预编译宏定义

1.先来几个常用的: [csharp] view plain copy // 是否高清屏   #define isRetina ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO)   // 是否模拟器   #define isSimulator (

编译错误-string在头文件中编译时提示缺少“;”,求解

问题描述 string在头文件中编译时提示缺少":",求解 碰到一个神奇的问题: //在head.h头文件中写如下代码: class A { public: string name; A (string); }; 结果编译的时候出现name前缺少":",如果我真的在name前加上一个":",编译的时候这个问题就没了,你说神奇不?有人知道怎么解决吗? 如果把class A和源文件写在一起就没问了,搞的我莫名其妙. 解决方案 C++为了安全,提供命名

indows编程 句柄-关于winnt.h头文件中有关句柄(HANDLE)的一段源代码的两个疑问,求大神解答。

问题描述 关于winnt.h头文件中有关句柄(HANDLE)的一段源代码的两个疑问,求大神解答. 大家好!我对winnt.h中的这段代码有疑问: #ifdef STRICT typedef void *HANDLE; #if 0 && (_MSC_VER > 1000) #define DECLARE_HANDLE(name) struct name##__; typedef struct name##__ *name #else #define DECLARE_HANDLE(nam

youcompleteme-VIM插件YouCompleteMe如何配置才能对自定义头文件中的函数和类型进行补全

问题描述 VIM插件YouCompleteMe如何配置才能对自定义头文件中的函数和类型进行补全 我最近在折腾YouCompleteMe,对基本的C/C++关键字都能进行补全,但不能对自己项目中的头文件中的标识符进行补全,已经在 .ycm_extra_conf.py中通过'-I','自己项目头文件的路径'的方式把自己的头文件路径加入了flags中,但还是不能对自己编写的头文件中的函数和类型进行补全,应该怎么配置??? 解决方案 我看了你的答案,没什么有用的内容 解决方案二: 可以看看这篇博文: h

嵌入式软件-比较大的项目中,头文件中声明的变量和函数一般不太好确定前面是不是要加extern把

问题描述 比较大的项目中,头文件中声明的变量和函数一般不太好确定前面是不是要加extern把 比如这个.h文件中他用了一个ifdef,这个只是一个类似一个标志吧,任何程序里面都可以这样用吗,这是比较好的方式吗 解决方案 这是查看宏定义,判断是否define了这个宏.然后决定后面的各种定义.以endif结尾 解决方案二: ifdef你可以看做if..extern表示你函数定义在别的文件里.这里应该是为了防止冲突,通过宏值,决定是否是用本类中的该函数还是其他文件的相同命名的函数(起函数功能可能有所区

第二条、在类的头文件中尽量少引入其他头文件

第二条.在类的头文件中尽量少引入其他头文件 当我们在一个类中去引入另一个类的时候,我们经常会这样使用: #import "xxxx.h" 这是一种常见的方法,但是不够优雅.举个例子.在Driver类中 Driver.h #import <Foundation/Foundation.h> @interface Driver : NSObject @property(nonatomic)NSString *name; @property(nonatomic)NSString *

getegid函数-请问getegid这个函数在vc中的哪个头文件中

问题描述 请问getegid这个函数在vc中的哪个头文件中 请问vc中有这个函数吗,有的话是在哪个头文件中呢,没有的话是用什么代替呢?我在msdn上搜过,那上面显示头文件是,但是我试了一下显示没有这个头文件的错误信息. 解决方案 参考C语言getegid()函数:获得组识别码 是C语言,没有说是VC. 头文件: #include <unistd.h> #include <sys/types.h> 定义函数:gid_t getegid(void); 函数说明:getegid()用来取