#pragma once与 #ifndef的区别

?

为了避免同一个文件被include多次

1???#ifndef方式
2???#pragma once方式

在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。
????方式一:

??? #ifndef __SOMEFILE_H__
??? #define __SOMEFILE_H__
??? ... ... // 一些声明语句
??? #endif

????方式二:

??? #pragma once
??? ... ... // 一些声明语句

??? #ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心"撞车",可能就会导致头文件明明存在,编译器却硬说找不到声明的状况

??? #pragma once则由编译器提供保证:同一个文件不会被包含多次。注意这里所说的"同一个文件"是指物理上的一个文件,而不是指内容相同的两个文件。带来的好处
是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题。对应的缺点就是如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。当
然,相比宏名碰撞引发的"找不到声明"的问题,重复包含更容易被发现并修正。

?? 方式一由语言支持所以移植性好,方式二
可以避免名字冲突

时间: 2024-10-20 00:01:06

#pragma once与 #ifndef的区别的相关文章

C/C++ 防止头文件重复包含 #pragma once 与 #ifndef 的区别

为了避免同一个头文件被多重包含/重复包含,有两种方式: 方式一: #ifndef XXX #define XXX ... ...  //声明语句 #endif  //XXX 方式二: #pragma once ... ...//声明语句 在能够支持这两种方式的编译器上面,两者没有太大区别,但任存在一些细微差别. 方式一---依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含. 缺点:缺点就是如果不同头文件的宏名不小心“撞车”,可能就会

【转载】#pragma once与#ifndef

本篇随笔为转载,原贴地址:#pragma once与#ifndef解析 为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式.在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别.    方式一: #ifndef __SOMEFILE_H__    #define __SOMEFILE_H__    ... ... // 声明.定义语句    #endif 方式二: #pragma once

#pragma once 与 #ifndef 解析(转载)

正在入门驱动编程,遇到一个小问题,如下详细解释. 原文链接:#pragma once 与 #ifndef 解析 http://www.cnblogs.com/hokyhu/archive/2009/03/30/1425604.html 为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式.在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别.     方式一: #ifndef __SOMEF

pragma once与#ifndef的作用有什么区别

#pragma once 这是一个比较常用的指令,只要在头文件的最开始加入这条指令就能够保证头文件被编译一次 #pragma once用来防止某个头文件被多次include,#ifndef,#define,#endif用来防止某个宏被多次定义. #pragma once是编译相关,就是说这个编译系统上能用,但在其他编译系统不一定可以,也就是说移植性差,不过现在基本上已经是每个编译器都有这个定义了. #ifndef,#define,#endif这个是C++语言相关,这是C++语言中的宏定义,通过宏

#pragma once 与 #ifndef 解析

转自:http://www.cnblogs.com/hokyhu/archive/2009/03/30/1425604.html 为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式.在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别.     方式一: #ifndef __SOMEFILE_H__     #define __SOMEFILE_H__     ... ... // 声明.

#pragma once 与 #ifdef 的区别

当一个项目比较大时,往往都是分文件,这时候有可能不小心把同一个头文件 include 多次,或者头文件嵌套包含: a.h 中包含 b.h : #include "b.h" b.h 中包含 a.h: #include "a.h" main.c 中使用其中头文件: #include "a.h" int main() { return 0; } 编译上面的例子,会出现如下错误: 为了避免同一个文件被include多次,C/C++中有两种方式,一种是 #

#pragma once 与 #ifndef

#pragma once:保证头文件只被编译一次.这种方式,是微软编译器独有的,也是后来才有的,所以知道的人并不是很多,用的人也不是很多,因为他不支持跨平台.如果你想写跨平台的代码,最好使用上一种.这是一种由编译器提供支持的方式,防止同一文件的二次编译,这里的同一文件指的是物理文件. #ifndef #define //code #endif 这个是C++语言相关,这是C++语言中的宏定义,通过宏定义避免文件多次编译.所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这

C++预处理和头文件保护符

一预处理 1.常见的预处理功能 预处理器的主要作用就是把通过预处理的内建功能对一个资源进行等价替换,最常见的预处理有:文件包含,条件编译.布局控制和宏替换4种.文件包含:#include 是一种最为常见的预处理,主要是做为文件的引用组合源程序正文.条件编译:#if,#ifndef,#ifdef,#endif,#undef等也是比较常见的预处理,主要是进行编译时进行有选择的挑选,注释掉一些指定的代码,以达到版本控制.防止对文件重复包含的功能.布局控制:#pragma,这也是我们应用预处理的一个重要

大数运算实现加减乘除四则运算

首先,让我们先来熟悉一下两种防止头文件被重复引用的处理#pragma once和#ifndef的区别 http://10739786.blog.51cto.com/10729786/1730827 接下来,开始我们的主题 <大数运算>    在平时生活中细心的你可能会发现,好多时候我们使用计算器时,总有一个显示的最大值,当计算超过这个值时就不能再计算了,那如果我们想要计算更大的数值要怎么办? 本文通过C++编程实现 大数的加减乘除四则运算 <思路与方法同样都在程序内部> 这次通过标