zoukankan      html  css  js  c++  java
  • #pragma once与 #ifndef的区别

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

    1   #ifndef方式
    2   #pragma once方式

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

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

        方式二:

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


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

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

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

    http://cppblog.com/szhoftuncun/archive/2007/10/28/35356.html

  • 相关阅读:
    我爱Java系列之---【SpringBoot打成war包部署】
    279. Perfect Squares
    矩阵dfs--走回路
    112. Path Sum
    542. 01 Matrix
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    Invert Binary Tree
    563 Binary Tree Tilt
    145 Binary Tree Postorder Traversal
  • 原文地址:https://www.cnblogs.com/feng9exe/p/10376401.html
Copyright © 2011-2022 走看看