这些是做什么用的

ctsting 2004-11-16 05:18:45
// aaaaa.h : main header file for the AAAAA application
//

#if !defined(AFX_AAAAA_H__A3854C40_3874_4650_BF3C_E0C977876980__INCLUDED_)
#define AFX_AAAAA_H__A3854C40_3874_4650_BF3C_E0C977876980__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

#include "resource.h" // main symbols

/////////////////////////////////////////////////////////////////////////////
// CAaaaaApp:
// See aaaaa.cpp for the implementation of this class
//

class CAaaaaApp : public CWinApp
{
public:
CAaaaaApp();

// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAaaaaApp)
public:
virtual BOOL InitInstance();
//}}AFX_VIRTUAL

// Implementation
//{{AFX_MSG(CAaaaaApp)
afx_msg void OnAppAbout();
// NOTE - the ClassWizard will add and remove member functions here.
// DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};


/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_AAAAA_H__A3854C40_3874_4650_BF3C_E0C977876980__INCLUDED_)




这些是我用vc 生成的代码,,小弟刚学,,看的我头晕,,谁能帮我一下
这些是做什么用的,,,
#define AFX_AAAAA_H__A3854C40_3874_4650_BF3C_E0C977876980__INCLUDED_
这个是定义宏吧,,为什么没有值,,,
...全文
108 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hcj2002 2004-11-16
  • 打赏
  • 举报
回复
可以不管这些信息
---------------------------------------------------------------------------

如果是学c++,建一个console的工程就可以了;如果学vc可以找一些vc的书看。^_^
goodluckyxl 2004-11-16
  • 打赏
  • 举报
回复
#if !defined(AFX_AAAAA_H__A3854C40_3874_4650_BF3C_E0C977876980__INCLUDED_)
#define AFX_AAAAA_H__A3854C40_3874_4650_BF3C_E0C977876980__INCLUDED_

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

删除
这样写 罗嗦的看着
#ifndef _AAAAAA_H
#define _AAAAAA_H
justoday 2004-11-16
  • 打赏
  • 举报
回复
除非您已经是个高手,很了解这些东西,,
要不然别乱删,,,那些注释是编译器生成给自己(编译器)看的,,
如果看不懂,不要管它就是了
ctsting 2004-11-16
  • 打赏
  • 举报
回复
在学校的时候学了C语言,,那时候还是在DOS下的,,
后来用DELPHI,,现在想起来了C++,,可看一下就晕了
ctsting 2004-11-16
  • 打赏
  • 举报
回复
goodluckyxl(被人遗忘的狗)
哪些是可以删的,,,
rferen2003 2004-11-16
  • 打赏
  • 举报
回复
严重统一楼上
goodluckyxl 2004-11-16
  • 打赏
  • 举报
回复
MFC 自动生成器 是一堆屎

有时删除了一些东东 包括 注释

极其有可能导致 无法正常编译

把所有的信息删除 手工写 比较好
beyondtkl 2004-11-16
  • 打赏
  • 举报
回复
先 可以不用管MFC给你生成的代码 因为它是一个frame 有自己的处理方式 刚开始确实很晕。。

可以先写一些console/sdk的呀。。。

sdk给你生成的代码就好懂的多了。。
xuzheng318 2004-11-16
  • 打赏
  • 举报
回复
学习!~
justoday 2004-11-16
  • 打赏
  • 举报
回复
刚接触到MFC编程的人往往会被MFC 向导生成的各种宏定义和预处理指令所吓倒,但是预处理和宏定义又是C语言的一个强大工具。使用它们可以进行简单的源代码控制,版本控制,预警或者完成一些特殊的功能。




一个经典的例子
使用预处理与宏定义最经典的例子莫过于加在一个头文件中以避免头文件被两次编译。试想这种的情况,有一个文件headerfile.h 它被包含在headerfile1.h中,同时在headerfile2.h 中也被包含了,现在有一个CPP文件,implement.cpp 包含了headerfile1.h 和headerfile2.h:

#include “headerfile1.h”

#include “headerfile2.h”

假设headerfile.h 中定义了一个全局变量 iglobal 。

int iglobal;

在编译的时候编译器两次编译headerfile,也就会发现iglobal被定义了两次,这时就会发生变量重定义的编译错误。

传统的解决办法是使用#ifdef 以及#endif 来避免头文件的重复编译,在上面的例子中,只需要加上这么几行:

#ifndef smartnose_2002_6_21_headerfile_h

#define smartnose_2002_6_21_headerfile_h

int iglobal;

#endif

仔细的考虑上面的宏定义,会发现当编译器编译过一次headerfile.h以后,smartnose_2002_6_21_headerfile_h 这个宏就被定义了,以后对headerfile.h的编译都会跳过int iglobal 这一行。当然smartnose_2002_6_21_headerfile_h 这个宏是可以任意定义的,但是这个宏本身不能和其它文件中定义的宏重复,所以MFC在自动生成的文件中总是使用一个随机产生的长度非常长的宏,但我觉得这没有必要,我建议在这个宏中加入一些有意义的信息,比方作者,文件名,文件创建时间等等,因为我们有时候会忘记在注释中加入这些信息。

在VC.Net 中我们不会再看见这些宏定义了,因为在这里会普遍使用一个预处理指令:

#pragma once

只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上在VC6中就已经有了,但是考虑到兼容性并没有太多的使用它。

源代码版本控制


源代码版本控制
当我们为许多平台开发多个版本的时候预编译指令和宏定义也能够帮我们的忙。假设我们现在为WINDOWS 和LINUX开发了一套软件,由于这两种系统的不同,我们不得不在程序控制源代码的版本。比方内存的分配,我们可以在LINUX上使用标准C的malloc 函数,但是我们希望在WINDOWS上使用HeapAlloc API。下面的代码演示了这种情况:

main()

{

………………..

#ifdef _WINDOWS_PLATFORM

HeapAlloc(5);

#else

malloc(5);

#endif

………………..

}

当我们在WINDOWS 平台上编译此程序的时候,只需要定义_WINDOWS_PLATFORM这个宏,那么HeapAlloc这条语句就能够起作用了。这样就能够让我们在同一个文件中为不同的平台实现不同版本的代码,同时保持程序的良好结构。在许多情况下,我们还可以为一个方法使用不同的算法,然后用宏定义来针对不同的情况选择其中的一个进行编译。这在MFC应用程序中是使用得最多的。最明显的就是文件中经常存在的

#ifdef _DEBUG

…………………….some code………..

#endif

这样的代码,这些代码在应用程序的调试版(DEBUG)中会发挥其作用。

#Pragma 指令
在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。其格式一般为

#Pragma Para

其中Para 为参数,下面来看一些常用的参数。

message 参数。 Message 参数是我最喜欢的一个参数,它能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为:

#Pragma message(“消息文本”)

当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。

当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法

#ifdef _X86

#Pragma message(“_X86 macro activated!”)

#endif

当我们定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示“_X86 macro activated!”。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了。

另一个使用得比较多的pragma参数是code_seg。格式如:

#pragma code_seg( ["section-name"[,"section-class"] ] )

它能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它。

最后一个比较常用的就是上面所说的#pragma once 指令了。

VC预定义的宏


VC预定义的宏
在VC中有一类宏并不是由用户用#define语句定义的,而是编译器本身就能够识别它们。这些宏的作用也是相当大的。让我们来看第一个,也是MFC中使用得最频繁的一个:__FILE__ 。

当编译器遇到这个宏时就把它展开成当前被编译文件的文件名。好了,我们马上就可以想到可以用它来做什么,当应用程序发生错误时,我们可以报告这个错误发生的程序代码在哪个文件里,比方在文件test.cpp中有这样的代码:

try

{

char * p=new(char[10]);

}

catch(CException *e )

{

TRACE(“ there is an error in file: %s\n”,__FILE__);

}

在程序运行的时候,如果内存分配出现了错误,那么在调试窗口中会出现there is an error in file: test.cpp 这句话,当然,我们还可以把这个错误信息显示在别的地方。

如果我们还能够记录错误发生在哪一行就好了,幸运的是,与__FILE__宏定义一样,还有一个宏记录了当前代码所在的行数,这个宏是__LINE__。使用上面的两个宏,我们可以写出一个类似于VC提供的ASSERT语句。下面是方法

#define MyAssert(x) \

if(!(x)) \

MessageBox(__FILE__,__LINE__,NULL,MB_OK);

我们在应用程序中可以象使用ASSERT语句一样使用它,在错误发生时,它会弹出一个对话框,其标题和内容告诉了我们错误发生的文件和代码行号,方便我们的调试,这对于不能使用ASSERT语句的项目来说是非常有用的。

除了这两个宏以外,还有记录编译时间的__TIME__,记录日期的__DATE__,以及记录文件修改时间的__TIMESTAMP__宏。

使用这些预定义的宏,我们几乎可以生成和VC能够生成的一样完整的源代码信息报表。

结论
翻开MFC和Linux的源代码,宏定义几乎占据了半边天,消息映射,队列操作,平台移植,版本管理,甚至内核模块的拆卸安装都用宏定义完成。毫不夸张的说,有些文件甚至就只能看见宏定义。所以学习宏定义,熟练的使用宏定义对于学习C语言乃至VC都是非常关键的。


--------------------------------------------------------------------------------
刘巍 - 高级程序员、软件设计师,精通VC,VB,COM,PLATFORM SDK,DDK,TCP/IP。独立开发过多种windows应用程序,WDM USB驱动程序,网络应用程序。熟悉加密技术,熟悉LINUX下的C/C++开发。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧