VS编程学习之#ifndef与#pragma once

来源:互联网 发布:忘不了前男友 知乎 编辑:程序博客网 时间:2024/06/03 14:42
#ifndef与#pragma once都用于避免同一个.h头文件被include多次
            .h头文件头文件一般包含函数定义,变量定义等,多次#include则会在导致重定义错误
            1.#ifndef用法
 1 2 3 4
#ifndef _EXAMPLE_H //_EXAMPLE_H可以为任何字符,这里与example.h相对应为_EXAMPLE_H
#define _EXAMPLE_H
...... //原来example.h的内容写在这里
#endif
 来自CODE的代码片
example.h
 
                      第一次include该.h文件的时候,由于宏_EXAMPLE_H没被定义,#ifndef _EXAMPLE_H语句为真,将执行#define _EXAMPLE_H语句与其后的example.h文件内容当再次include该.h文件时,由于第一次已经定义了_EXAMPLE_H,故将跳过定义_EXAMPLE_H与执行example.h文件内容步骤。这样便可以避免多次include同一.h文件导致的多重定义错误。
              2.#pragma once用法
 1 2
#pragma once
...... //原example.h文件内容
 来自CODE的代码片
example2.h
               #pragma once 指示编译器对该.h头文件只include一次,多次include编译器将会忽略,从而保证该文件只被包含一次,避免重定义错误。
              3.#ifndef与#pragma once的区别
  • #ifndef:依赖于宏名不冲突,如示例中的_EXAMPLE_H这个宏,这种方法可以保证同一内容文件不会被包含多次。但,如果宏_EXAMPLE_H在其他文件中被定义的话,也就是发生冲突了,就会导致该.h文件存在,但编译器找不到的错误。
  • #pragma once:能保证同一文件不被include多次,不能保证同一内容文件不被多次include,如将example.h文件的里一份拷贝命名为examplecopy.h,虽然则这两个文件内容相同,但#pragma once不能保证其不被同时include.   

  • 推荐使用#ifndef。 
#pragma once编译器相关,受编译器限制
推荐使用#ifndef
转载自:http://blog.csdn.net/lovecodeless/article/details/23366255

0 0
原创粉丝点击