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是微软特用的。







posted on 2011-12-30 11:56  天上星  阅读(694)  评论(0编辑  收藏  举报

导航