进行宏定义宏名要求时,宏名必须用大写


在c语言的编写中允许一个字符串代替一串字符串,我们将这种代替操作称之为“宏操作”
1.1 #define 宏定义宏名要求命令 一个#define 只能定义一条宏,如果需要定义多条宏需分多行並采用多个#define
1.2 标识符通常采用大写字母,字符串可以是变量 关键字 语句 表达式 函数 空白等等
1.3 在编译器进行编译的前期,编译器会根据宏定義宏名要求规则替换当前文件下所有同宏(标识符)相同的标识符进行替换


2.1 不带参数宏定义宏名要求:用标识符来代替一个字符串,或一串没有特殊字符(括号 下标号 表达式)的字符串,通常用于定义符号常量
以上的定义,将会使程序在编译之前会将出现AAA BBB TYPEINT 标识符的地方都替換为 1 0 int,然后再进行编译


2.2 宏定义宏名要求允许嵌套定义 例:


2.3 不带参数宏定义宏名要求优点
2.3.1 使用宏定义宏名要求可以对系统中比较常用并且较長的表达式,进行缩写
2.3.2 使用宏定义宏名要求设置程序中相关参数,方便程序的调整


三、带参数宏定义宏名要求 在宏定义宏名要求中的參数称之为形参,在宏调用中使用的参数称之为实参在进行编译器的替换时,需要进行字符串的替换同时还要进行参数的替换。


四、帶参数的宏和函数的区别 4.1 函数调用时先得出参数的值,然后传入函数中进行计算;宏则只进行字符串替换不进行计算;


4.2 函数调用发生茬程序运行时;宏则是发生在编译时;
4.3 函数的形参和实参都需定义类型;宏定义宏名要求时不用定义类型;
4.4 函数调用时,只有一个返回值;宏调用时候可以有很多个值发生变化;
4.5 函数不会使源代码变长;宏会使源代码变长;
4.6 函数调用会消耗程序运行时间宏调用则不会消耗程序运行时间,只会增加程序编译时间;


五、使用宏定义宏名要求时注意事项 5.1 宏定义宏名要求通常采用大写字母来区别变量的定义


5.2 宏定義宏名要求就是用宏名来代替一串字符串,编译时程序会自动将标识符等于宏名的地方采用字符串替换,这是一种简单的替换不会做任何检查。
5.3 宏定义宏名要求不是说明语句行结束不需要使用分号结束,如果加上分号,替换的时候会将分号作为字符串的一部分 一起去替換标识符
5.4 宏参数定义时,宏名和形参之间不能有空格
5.5 宏参定义时,形参 通常采用小括号
5.6 宏命令的有效范围:宏命令定义在函数外部,則在整个程序文件中都有效


5.7 可以采用undef 终止宏定义宏名要求的有效范围。 例:

//以上代码程序编译的时候就会提示找不到AAA 的定义。

  通过运行时在串行结构中为動态CObject派生类访问类名和位置来产生必要的C++代码在.CPP文件中使用IMPLEMENT_DYNAMIC宏,接着一次链接结果对象代码 

  通过运行时在串行结构中动态CObject派生类访問类名和位置来建立必要的C++代码在.CPP文件中使用IMPLEMENT_SERIAL宏,然后一次链接结果对象代码 

  此宏通过ClassWizard或手工插入一个消息映射。它表明那个函數将从一个命令用户接口(例如一个菜单项或toolbar按钮)处理一个命令消息当一个命令对象通过指定的ID接受到一个Windows WM_COMMAND消息时,ON_COMMAND将调用成员函数memberFxn處理此消息在用户的消息映射中,对于每个菜单或加速器命令(必须被映射到一个消息处理函数)应该确实有一个ON_COMMAND宏语句

  表明哪個函数将处理一个常规控制表示消息。控制标识消息是那些从一个控制夫发送到母窗口的消息 

  指明哪个函数将处理一用户定义消息。用户定义消息通常定义在WM_USER到0x7FF范围内用户定义消息是那些不是标准Windows WM_MESSAGE消息的任何消息。在用户的消息映射中每个必须被映射到一个消息處理函数。用户定义消息应该有一个ON_MESSAGE宏语句 

  Windows的RegisterWindowsMesage函数用于定义一个新窗口消息,此消息保证在整个系统中是唯一的此宏表明哪个函數处理已注册消息。变量nMessageViable应以NEAR修饰符来定义 

  此宏通常通过ClassWizard被插入一个消息映射,以指明哪个函数将处理一个用户接口个更改命令消息在用户的消息映射中,每个用户接口更改命令(比讯被映射到一个消息处理函数)应该有一个ON_UPDATE_COMMAND_UI宏语句 

  此宏通常通过ClassWizard被插入一个消息映射,以指明哪个函数将处理一个来自VBX控制的消息在用户的消息映射中每个被映射到一消息处理函数的VBX控制消息应该有一个宏语句。 

  派出指定的异常THROW中断程序的运行,把控制传递给用户程序中的相关的CATCH块如果用户没有提供CATCH块,那么控制被传递到一个MFC模块他咑印出一个错误并终止运行。 

  此宏允许用户派出一个局部建立的异常如果用户试图排除一个刚发现的异常,那么一般此异常将溢出並被删除使用THROW_LAST,此异常被直接传送到下一个CATCH处理程序。 

  把一个格式化字符串送到转储设备例如,文件或调试监视器而提供与printf相似嘚功能。同MS_DOS下C程序的printf一样TRACE宏是一个在程序运行时跟踪变量值的方便形式。在DEBUG环境中TRACE宏输出到afxDump。在Release版中他不做任何工作 

  与TRACE相似,泹他把跟踪字符串放在代码段中而不是DGROUP,因此使用少的DGROUP空间。TRACE0是一组跟踪宏的一个变体这些宏可用于调试输出。这一组包括TRACE0,TRACE1,TRACE2和TRACE3,这些宏不哃在于所取参数的数目不同TRACE0只取一个格式化字符串并可用于简单文本消息。TRACE1取一格式化字符串加上一个变量——一个将转储的变量同樣,TRACE2,TRACE3分别取2个或3个参数(在格式化字符串之后)如果用户以便以了应用程序的发行版,那么它只把数据转储到afxDump 

  使用此宏建立一TRY块。一个TRY识别一个可排除异常的代码块这些异常在随后的CATCH和AND_CATCH块处理。传递是允许的:异常可以传递一个外部TRY块或者忽略它们或者使用THROW_LAST宏。 

  在MFC的DEBUG版中VERIFY宏计算它的变量值。 如果结果为0那么宏打印一个诊断消息并中止程序。如果条件不为0那么什么工作也不作。 诊断有洳下形式: assertion failed in file in line 其中name是源文件的名字num是在源文件中失败的中止行号。在MFC的Release版中VERIFY计算表达式值但不打印或中止程序。例如:如果表达式是个函数调用那么调用成功。

我要回帖

更多关于 宏定义宏名要求 的文章

 

随机推荐