#ifndef跟if !defined有区别吗?为什么VC++ MFC appwizard生成的同一个头文件里两种方法一起用

#ifndef和if !defined有区别吗?为什么VC++ MFC appwizard生成的同一个头文件里两种方法一起用?
#if !defined(AFX_NEW_H__8D5BA385_1C96_4E37_9B34_75DF9D32667C__INCLUDED_)
#define AFX_NEW_H__8D5BA385_1C96_4E37_9B34_75DF9D32667C__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif
。。。。。。
#endif

------解决方案--------------------
功能没什么区别,#if !defined有强调的意图。
------解决方案--------------------
MFC 的向导这么做, 也是普及一下它的编译器支持的多种语法吗.

------解决方案--------------------
#if !defined 与#ifndef 没有区别,意义是一样。
但是#if !defined好在可以连多个条件,如:
#if !defined(MACRO_A) && !defined(MACRO_B)
#else
#endif
而#ifndef 仅能设定一个条件,多用于防止头文件重复包含。