VC中#ifdef和#pragma once的区别
有两个头文件: a.h和b.h
//a.h
//a.h
#ifndef _a_h
#define _a_h
void amsg();
#endif
//b.h
//b.h
#pragma once
void bmsg();
它们的源代码为:
a.cpp
#include <STDIO.H>
#include "a.h"
void amsg()
{
printf("Call a.msg()\n");
}
b.cpp
#include "b.h"
#include <STDIO.H>
void bmsg()
{
printf("Call b.msg()\n");
}
调用Main.cpp
#include "a.h"
#include "b.h"
#include "a.h"
#include "b.h"
void main()
{
amsg();
bmsg();
}
上面我们用到#ifndef .. #endif和#pragma once.
a.h要打开两次,而b.h只打开一次即可。
它们都是为了防止头文件被多次编译而存在。我们在调用时会发现它们的区别是:
当多次调用同一个头文件时,如果用的是#ifdef的话,每次执行到#include时都会打开一次头文件,而用#pragma once是当这个头文件打开一次后就会被编译器记住,以后再调用此头文件时便不再打开。
#pragma once是微软特用的。