每日一C之#ifndef与#pragma once
每天拾一个C语言贝壳,厚积薄发,积跬步以致千里。
今日贝壳:#ifndef与#pragma once都用于避免同一个.h头文件被include多次。
.h头文件头文件一般包含函数定义,变量定义等,多次#include则会在导致重定义错误。
1.#ifndef用法:
#ifndef _EXAMPLE_H //_EXAMPLE_H可以为任何字符,这里与example.h相对应为_EXAMPLE_H
#define _EXAMPLE_H
...... //原来example.h的内容写在这里
#endif
第一次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用法
:
#pragma once
...... //原example.h文件内容
3.#ifndef与#pragma once的区别
:
- #ifndef:依赖于宏名不冲突,如示例中的_EXAMPLE_H这个宏,这种方法可以保证同一内容文件不会被包含多次。但,如果宏_EXAMPLE_H在其他文件中被定义的话,也就是发生冲突了,就会导致该.h文件存在,但编译器找不到的错误。
- #pragma once:能保证同一文件不被include多次,不能保证同一内容文件不被多次include,如将example.h文件的里一份拷贝命名为examplecopy.h,虽然则这两个文件内容相同,但#pragma once不能保证其不被同时include.
- 推荐使用#ifndef。
Have a nice day !