(1):
以从到下逐步来解读这个软件,由 YUVviewer.cpp 逐步向下进行拓展:
1.stdafx.h
#if !defined(AFX_STDAFX_H__51FE175E_2896_4B95_82AC_E834A7145FC1__INCLUDED_)
#define AFX_STDAFX_H__51FE175E_2896_4B95_82AC_E834A7145FC1__INCLUDED_
#if _MSC_VER > 1000
#pragma once//这条预编译指令的作用是保证头文件只是被编译一次,在 VC 平台上使用,但
是考虑到兼容性,使用还不是很多
#endif // _MSC_VER > 1000
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the
previous line.
#endif//此处有稍许的不解,为什么这里的#endif 的颜色是灰色的呢??
// !defined(AFX_STDAFX_H__51FE175E_2896_4B95_82AC_E834A7145FC1__INCLUDED_)
这个函数库作为这个简易软件预编译的第一个库函数,作用是把一个project 中使用的一些
MFC 标准头文件(如 windows.h,afxwin.h)预先编译,以后该工程编译时,不在编译这部分
头文件,仅仅使用预编译的结果。这样的好处就是能够加快编译的速度,节省时间和效率。
2.stdafx.h 的实例化:这个预编译的文件是通过编译 stdafx.cpp 生成,以工程命名。预编
译头文件通过编译 stdafx.cpp 生成,以工程名命名,由于预编译的头文件的后缀是“pch”,
所以编译结果文件是 projectname.pch。译器通过一个头文件 stdafx.h 来使用预编译头文件。
另外,编译器会认为,所有在指令#include ”stdafx.h"前的代码都是预编译的,因此,所
有 CPP 实现文件的第一条语句都是:#include “stdafx.h”
3.#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
这个预编译语句,是几乎每一个文件 CPP 都包含的语句。表示如果生成调试版本,要指定当
前文件的名称。__FILE__是一个宏,在编译器过程中给它赋值为当前正在编译的文件名称。
VC.NET 默认情况下使用预编译头(/Yu),不明白的在加入新.h 文件后编译时总出现 fatal