文章目录
ifndefpragma once区别ifndef
ifndef是c/c++语言中支持的宏定义。 格式大体如下:
#ifndef __X__#define __X__ /*...*/#endif
“ifndef”是“if not define” 的缩写。 作用就和字面意思一样。如果没有定义 则定义。
这样通过宏定义来避免一个文件被多次编译。
但是使用宏定义会有宏名冲突的问题,例如类似这样的
#define X 3#define X 4
这里对X的宏定义重复进行,这样是会编译出错的。但是如果使用ifndef会导致有一个文件中相同名称的部分被忽略。
pragma once
“pragma once” 是微软编译器支持的,意思是对文件只编译一次。使用只需要在文件头处加一句即可。
#pragma once
当然因为是编译器提供支持的,这就意味着如果编译器不同就有可能出现报错。当换编译器或换平台时我们就需要修改代码。
区别
“ifndef”是c/c++提供的语言特性,“pragma”是编译提供支持。所以“ifndef”拥有更好的跨平台移植性。
“pragma”拥有更高的效率,当编译器遇到“ifndef”时,如果发现这个已经被编译,会一直向下忽略,直到遇到“endif” ,如果是使用“pragma once” 编译器会直接停止编译该文件。 也就是说,使用“ifndef”时 虽然没有编译第二遍, 但是文件依然是会被读取的。