VC预处理手册

合集下载

利用VC++开发图像采集卡与图像预处理库

利用VC++开发图像采集卡与图像预处理库
存 ( a b, F、 数 字 转 换 器 ( it e)和 数 据 显 示 D t l e) a / f Dgi r l ̄
p bi: ul c
( i l ),将 图像文件读人数据疆存 ,将缓存赋值给数组 , Ds a py 这样 就通过对数组的处 理实现 对图像的处理 ,图像 数据 与数据
在工 业 中生产 监控印 刷检测 和 邮件分 拣系统 ,以及高 速 公路 车辆和 车牌的 自动识别管 理系统 等一系列 图像处理技 术 成功 应用的 饲子 中。 如何 对 图像 快速 有效地实现 预处理 ,提 取 出关键有 效的特征信 息 ,对 于图像进 一步 的分 割 、匹配 、 识别 具有重 要的意义 ,这也是 图像技术 是否 能实用化 的关 键
技术之一 。
旱 鸯匪 -: . u 一 坐 |J 呈竺十塑I . . 吨! 高 I —
! .

~ 一 / ( Z/
圈 1 图像采囊处理 系统 蝻构示童圈
Max t ̄图像 采集卡带有 丰富 的程序库—— M 一 1E( l Ⅱ LT 基本 控 制库 ) 1 ( 、M L 模式识别库 ) 。可以在 MSVi a / s l Cd u C -+、MS Vsa B s 、B r n C C++下 涌用其现 有 的功能强 大 的图 i l ai u c oa d / l 像 处理 函数。程序运行在 3 2位开发环境 .支持 Widw 5 n o s9 、
智慧密集
- 渊花 拦 o 3
4 )在 I aercsVe . m gPoes i h头文件添加定义 w
ca sCl e e c s Ap :p bi l m g Po e s p s r u l CW iAp c n p
、 -
相当于创建一个 图像处 理的控制 和执行环境 ,在应用对象下可 以建立多 个系统 ( tm), 却s e 一个系统下可 以建立 多个数据缓

关于VC预定义常量_WIN32,WIN32,_WIN64

关于VC预定义常量_WIN32,WIN32,_WIN64

VC2012 下写 Windows 时,有时需要判断编译环境。

在之前的文章《判断程序是否运行在 Windows x64 系统下。

》里说过如何在运行期间判断系统环境,但在编译时如何判断?MSDN 里说,VC 有 3 个预处理常量,分别是 _WIN32,_WIN64,WIN32。

这三个常量如何使用呢?看起来简单,其实是很困惑的。

在 Win32 配置下,WIN32 在“项目属性-C/C++-预处理器-预处理器定义”里声明了,而在 x64 配置下,这个常量并不在项目预定义列表中。

这是否说明可以根据 WIN32 来判断是否在 x64 平台呢?不。

在 Windows SDK 的minwindef.h 下第 37 行有如下定义:#ifndef WIN32#define WIN32#endif即是说,只要包含了 Windows.h,那么 WIN32 常量是肯定定义了的,所以不能用于判断平台环境。

但是如果在预处理定义里删掉 WIN32,又不包含Windows.h,那么 WIN32 未定义。

下面看 _WIN32 和 _WIN64,这两个比较特别,没有任何显式定义。

在Windows.h 里没有,在“项目属性-C/C++-预处理器-预处理器定义”下也没有。

根据 MSDN,这是由编译器(ml.exe/ml64.exe)内部定义的。

具体描述是_WIN32:Defined for applications for Win32 and Win64. Always defined._WIN64:Defined for applications for Win64.下面看一段程序:(分别在 Win32 和 x64 配置下运行一次)#include <iostream>using namespace std;int main() {#ifdef _WIN64cout << "_WIN64 is defined as " << _WIN64 << endl;#endif#ifdef _WIN32cout << "_WIN32 is defined as " << _WIN32 << endl;#endifcin.get();return 0;}在 Win32 配置下,_WIN32 有定义,_WIN64 没有定义。

VC6.0运行库参考手册(C)

VC6.0运行库参考手册(C)

返回总目录c a b sc a l l o cc e i lc e x i t,c e x i tc g e t sc hd i r,w c h d i rc hd r i v ec h g s i g nc h m o d,w c h m o dc h s i z ec l e a r87,c l e a r f pc l e a r e r rc l o c kc l o s ec o m m i tc o n t r o l87,c o n t r o l f p c o p y s i g nc o s,c o s hc p r i n t fc p u t sc r e a t,w c r e a t c s c a n fc t i m e,w c t i m e c w a i tc a b s计算一个复数的绝对值。

d o u b le c a b s(s t r u c t c o m p l e x z);对于另外兼容性的信息,参见引言中的兼容性返回值如果成功,c a b s返回它的参量的绝对值。

不溢出时,c a b s返回H U G E V A L并设置e r r n o为E R A N G E。

你可以用m a t h e r r改变错误处理。

参数z复数。

说明c a b s函数计算一个复数的绝对值,它必须是类型c o m p l e x的结构,结构z是由一个实数部分x和一个虚部分y组成,调用c a b s产生表达式s q r t(z.x*z.x+z.y*z.y)的值。

例子/*C A B S.C:U s i n g c a b s,t h i s p r o g r a m c a l c u l a t e s*t h e a b s o l u t e v a l u e o f a c o m p l e x n u m b e r.*/#i n c l u d e<m a t h.h>#i n c l u d e<s t d i o.h>v o id m a i n(v o i d){s t r u c t c o m p l e x n u m b e r={3.0,4.0};d o u b le d;d=c a b s(n u m b e r);p r i n t f("T h e a b s o l u t e v a l u e o f%f+%f i i s%f\n",n u m b e r.x,n u m b e r.y,d);}输出结果T h e a b s o l u t e v a l u e o f3.000000+4.000000i i s5.000000参见a b s,f a b s,l a b sc a l l o c在存储器中分配一个数组并初始化为0。

DEVC工程预处理和EGG图形库

DEVC工程预处理和EGG图形库
第9页/共86页
DEV-C++下工程的创建
4. 此时系统自动加入main.c文件如下。里面代码是系统自动 生成的。
第10页/共86页
DEV-C++下工程的创建
二. 往工程中增加已创建的其他文件 将linkNode.h、link.c和link.h三个文件拷贝到工程所在目录G:\temp\testProject下 然后点击菜单 工程->添加
提纲
预处理指令 #include 预处理指令 #define:符号常量 预处理指令 #define:宏 条件编译
第32页/共86页
预处理指令 #define:宏
• #define用来定义 • 符号常量(用符号表示的常量)。 • 宏(用符号定义的操作)。
•宏 • 宏用来替代一个字符串,类似于符号常量,宏在预处理时被替换字符串取代。 • 不带参数的宏:预处理程序就像处理符号常量一样处理不带参数的宏。 • 带参数的宏:先用替换文本取代参数,然后再把宏展开。
第21页/共86页
VC6环境下工程的创建 在VC6开发环境中: 1. 点击File->New弹出菜单(如下图)
第22页/共86页
VC6环境下工程的创建
2.选择Projects选项卡,选择Win32 Console Application, 在Project name文本框输入工程名(如elevator),在 Location文本框选择路径如(如C:\test)(见下图)点击OK
第33页/共86页
预处理指令 #define:宏
• 带参数的宏定义格式: • #define 标识符(形式参数表) 字符串 • 形式参数表由逗号分割开的标识符组成,这些标识符在字符串中出现。 • 如:#define PI 3.14159 //常量定义 #define CIRCLE_AREA(x) (PI*(x)*(x)) #define MAX(x,y) ((x)>(y)?(x):(y)) #define NUL(x,y) ((x)*(y))

vc的dll基本用法2

vc的dll基本用法2

vc的dll基本用法2==MICROSOFT基础类库:CaptureEncode项目概述===应用程序向导已为您创建了这个CaptureEncode应用程序。

此应用程序不仅演示Microsoft基础类的基本使用方法,还可作为您编写应用程序的起点。

本文件概要介绍组成CaptureEncode应用程序的每个文件的内容。

CaptureEncode.vcproj这是使用应用程序向导生成的VC++项目的主项目文件。

它包含生成该文件的Visual C++的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。

CaptureEncode.h这是应用程序的主要头文件。

它包括其他项目特定的头文件(包括Resource.h),并声明CCaptureEncodeApp应用程序类。

CaptureEncode.cpp这是包含应用程序类CCaptureEncodeApp的主要应用程序源文件。

CaptureEncode.rc这是程序使用的所有Microsoft Windows资源的列表。

它包括RES子目录中存储的图标、位图和光标。

此文件可以直接在Microsoft Visual C++中进行编辑。

项目资源位于2052中。

res\CaptureEncode.ico这是用作应用程序图标的图标文件。

此图标包括在主要资源文件CaptureEncode.rc中。

res\CaptureEncode.rc2此文件包含不在Microsoft Visual C++中进行编辑的资源。

您应该将不可由资源编辑器编辑的所有资源放在此文件中。

///////////////////////////////////////////////////////////////// ////////////应用程序向导创建一个对话框类:CaptureEncodeDlg.h,CaptureEncodeDlg.cpp-对话框这些文件包含CCaptureEncodeDlg类。

VC废水

VC废水

维生素生产厂在生产过程中产生大量生产废水。

根据废水浓度高低,可分为两类。

一类为高浓废水,COD浓度约33000mg/l,并含有25%左右的氯化氨,pH≈5,偏酸性,排放水量200t/d 左右。

第二类为清洗水和水洗水,COD浓度较低,约为1500mg/l,pH≈5~6,水量也为200t/d 左右。

厂区废水经处理后要求厂区所在地污水厂接管标准,主要指标为:COD≤1000mg/l,BOD≤500mg/l。

维生素生产废水处理:设计范围1.某维生素有限公司污水处理工程工艺设计。

包括:工艺、结构、电气等主要专业的详细设计、设备选型和说明等技术文件。

2.工程投资概算等。

3.工程的安装、调试及操作人员的上岗培训等。

维生素生产废水处理:设计依据1.某维生素有限公司提供的废水水量水质情况及其它有关资料;2.某人民政府关于废水处理的相关文件。

3.同类型污水处理设施设计、运行的成功经验。

污水处理工程设计水量污水处理工程主要功能为:接纳并有效处理厂区内的生产废水,确保出水达到污水厂接管标准。

根据化工废水处理设计相关规范和同类型污水处理设施设计、运行经验,本方案确定处理系统设计处理水量、时平均流量、运行方式等参数如下:处理水量:400m3/d;时平均流量:Qh=16.7m3/h;运行方式:24小时连续运行。

维生素生产废水处理:2.2污水处理工程设计水质根据提供的资料,污水处理系统进水水质主要指标如下表:维生素生产废水处理:2.3出水排放标准根据当地有关化工废水排放标准和相关的设计规范,废水经处理后,必须达到当地污水厂接管标准,因此本污水处理工程出水水质主要考核项目及指标如下表所示:出水水质主要考核指标处理工艺选择及确定维生素生产废水处理:3.1工艺设计原则、依据维生素生产废水处理:3.1.1污水处理工艺设计原则根据进水水量、水质特点和出水排放标准的要求,采用国内外成熟、先进,高效、实用,经济合理的处理工艺,确保出水达到当地污水厂接管标准。

Vc废水处理

Vc废水处理

1 引言1.1 偶氮染料废水处理现状随着印染技术和染料的发展,如今合成染料在工业品中应用非常广泛,同时印染工业生产的废水量也大量增加,约占工业废水总排放量的1/10[1]。

纺织工业中应用的染料有上万种,在印染过程中,大约有10 %~15 %的染料被排出[2]。

分子中含有偶氮基(N=N)的染料称为偶氮染料,是工业染料中品种最多,用量最大的一类,占有机染料产品总量的70%[3],其中包括酸性、媒染、活性、阳离子、中性染料、分散染料等,绝大部分偶氮染料是芳香胺经重氮化后与酚类、芳香胺类具有活性的亚甲基化合物偶合而成。

偶氮染料废水的化学性质较稳定,废水成分复杂,是公认的难处理的高浓度有机废水[1]。

目前的处理方法主要有物理法、化学法、生物法及这些方法的组合。

吸附法只对亲水性染料效果明显,且容易受到水中油脂和悬浮染料的影响而失效,且吸附剂用量大、成本高、再生困难;混凝法只对疏水性染料起作用,而对亲水性染料没有效果,COD去除率低[4]。

湿式氧化法设备造价高,O3做氧化剂氧化效果好,但投量大成本高。

Cl2做氧化剂效果较好但容易造成二次污染。

生物法具有占地面积小、运行成本低、无二次污染的优点,但是近年来由于多数染料在合成过程中添加进了抗氧化成分使其在水洗或光照条件下不易褪色[5],因此染料废水的可生化性差,常规活性污泥中的细菌无法吞噬,普通的生化处理过程中易产生更具毒性的中间产物[6]。

随着电化学技术的发展,采用电化学方法处理染料废水,由于其设备小、占地少、运行管理简单、COD去除率高和脱色效果好等优点,日益受到人们的重视[7]。

近几十年来,随着电化学科学和电力工业的发展,使处理成本大大降低,电化学已成为一类具有竞争力的废水处理方法[8]。

1.2 电化学方法1.2.1 电化学水处理技术的基本原理电化学法是近年来研究较多的一种能够有效降解偶氮染料的新技术。

它是利用外加电极在特定的反应器中执行设计的化学反应、电化学过程或物理过程,利用电解作用达到去除染料废水中的污染物或回收有用物质的目的[1]。

VC++6.0使用手册(史上最全)

VC++6.0使用手册(史上最全)

图1-1Visual C++界面开项目工作区文件时其他文件随即会自动打开。

在此文件夹下还会创建 Res(资源)、Debug(调试)、Release(发行)等子文件夹。

2.2编辑 在编辑窗口打开、浏览文件、输入、修改、复制、剪切、粘贴、查找、替换、撤销等操作,可以通过菜单完成,也可以通过工具栏按钮完成,这些与 Word 之类的 windows 编辑器用法完全相同,这里就不再重复叙述了。

2.3辅助VC 不仅提供了“语法着色”帮助我们阅读程序,还可以通过一些快捷键检查常见的括号不匹配错误。

MSDN 也可以在编辑过程中提示存在的变量名、函数名。

很多程序员借助类似 Visual Assist X 的工具辅助开发,减少程序出错的可能性。

3.开发 C 程序3.1开发单个 C 语言程序1. 创建一个工作文件夹。

由于开发过程会产生一系列文件,建议每开发一个新的 C 程序都创建一个工作文件夹。

还可以将所有工作文件夹集中到一起,如E:\LXH\EX01-01 、E:\LXH\EX03-02 等。

2. 启动 Visual C++。

3. 新建一个 C 语言源程序。

选择菜单:File 下的 New 菜单项,出现如图 1-2 所示 new(新建)对话框。

图1-2选择菜单File下的New菜单项选择 Files标签下的 C++Source File 在“E:\LXH\EG01-01”文件夹中创建C 程序:eg01-01.c,如图 1-3 所示。

图1-3Files标签4. 输入、编辑源程序。

注意不要输入中文标点符号,要及时按 Ctrl+S 保存文件,如图 1-4 所示。

图1-4输入源程序5.编译、连接。

点击“BuildMiniBar”工具栏上的“Build”按钮进行编译、连接。

也可以选择菜单 Build 下的 Build (F7) 菜单项或Rebuild All菜单项。

更简捷的方法是直接按 F7 功能键。

Visual C++将提示创建默认工作区,如图 1-5 所示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

返回总目录M ic r o s o f t V is u a l C++ 6.0预处理器参考手册目录引言 (3)特殊术语 (3)第1章预处理器 (4)特殊术语 (4)翻译阶段 (5)预处理器指令 (7)预处理器操作符 (37)宏 (41)第2章编译指示指令 (48)C++编译器专有编译指示 (49)C和C++编译器编译指示 (53)附录语法总结 (76)定义 (76)约定 (77)预处理器语法 (77)引言本书用于介绍M i c r o s o f t V i s u a l C++的预处理器,预处理器是C和C++文件送入编译器之前对其进行预处理的一种工具,它的功能如下:z定义和反定义宏z扩展宏z条件编译代码z插入指定的文件z指示编译时产生的错误信息z将特定机器的规则用于代码的指定部分特殊术语在本书中,名词“参量”指的是传送给一个函数的实体。

有时候,它用“a c t u a l”或“f o r m a l”修饰,它们分别用于表示函数调用时的参量表达式和在函数定义时的参量说明。

名词“变量”指的是一种简单的C类型数据对象,名词“对象”指的是C++对象和变量;它是一个含义广泛的名词。

第1章预处理器预处理器是一种处理源文件文本的文本处理器, 它是翻译起始阶段的一个组成部分。

预处理器并不在语法上分析处理源文本,但出于定位宏调用的目的,它将源文本分开语言符号。

虽然编译器一般在初次编译时启动预处理器,但预处理器也可以不经编译,单独地处理文本。

M i c r o s o f t特殊处→用/E或/E P编译器选项进行预处理之后,你可以得到一个源代码的列表。

在多数情况下,启动预处理器和输出结果文本到输出设备,这两种选项都是控制台指令,这两种选项的区别在于/E包括了#l i n e指令,/E P没有这些指令。

M i c r o s o f t特殊处结束特殊术语在本书中,名词“参量”指的是传送给一个函数的实体。

有时候,它用“a c t u a l”或“f o r m a l”修饰,它们分别用于表示函数调用时的参量表达式和在函数定义时的参量说明。

名词“变量”指的是一种简单的C类型数据对象,名词“对象”指的是C++对象和变量;它是一个含义广泛的名词。

翻译阶段C和C++程序由一个或多个源文件组成,它们都包含了程序的某些文本,一个不包含代码部分的源文件和它的包含文件(用#i n d u d e预处理器指令包含的文件),若被条件编译指令(比如#i f)调用,则称其为一个“转换单元”。

源文件可被翻译多次,翻译过去的文件事实上是很正常的。

已经翻译了的翻译单元可保存在单独的对象文件或对象代码库里,这些单个的转换单元可被连接形成一个可执行文件或动态链接库(D L L)。

转换单元可采用下列形式通信:z调用具有外部连接的函数。

z调用具有外部连接的类成员函数。

z直接更改具有外部连接的对象。

z文件的直接更改。

z内部外理通信(仅限于基于M i c r o s o f t W i n d o w s的应用程序)。

以下是编译器翻译文件的各个阶段:字符映射源文件中的字符被映射为内部源代码的形式。

此阶段三字母序列被转换为单字符的内部表现形式。

行拼接在此阶段,源文件中所有以反斜杠(\)结尾且其后紧跟一换行符的行, 将与下一行连接,从而由物理行生成逻辑行。

所有非空源文件结束于一个前面没有反斜杠的换行符。

语言符号化此阶段源文件被分为预处理语言符号和空白字符。

源文件中每个注释被用一个空白字符代替。

换行符被保留。

预处理此阶段执行预处理指令并将宏扩展至源文件,#i n c l u d e语句调用对所有包括文本启动前面三个翻译步骤开头的翻译过程。

字符集映射所有的源字符集成员和转义序列将转换为执行字符集中的等价形式,对于M i c r o s o f t C和C++来说,源字符集和执行字符集都是A S C I I码。

字符串合并所有相邻的字符串和宽字符文字都将被合并。

例如:“S t r i n g”“c o n c a t e n a t i o n”合并为“S t r i n g c o n c a t e n a t i o n”。

翻译所有的语言符号将按语法和语义规则进行分析;这些语言符号被转换为目标代码。

链接此阶段所有的外部引用被分解以生成一个可执行程序或一个动态链接库。

编译器在翻译过程中遇到语法错误时,将发出一个警告或错误信息。

链接器分解所有的外部引用,并把一个或多个分开处理的转换单元和标准库联接起来,以生成一个可执行程序或动态链接库(D L L)。

预处理器指令预处理器指令如#d e f i n e和#i f d e f, 一般被用在不同的运行环境下,使源程序易于更改和编译。

源文件中的指令指示预处理器执行特有的行为。

例如,预处理器可替换文本中的语言符号,将其它的文件内容插入源文件中,或移走文本的一部分以抑制文件中某部分的编译。

预处理器行在宏扩展之前被识别且执行。

不过,如果宏扩展看起来象一个预处理器指令,该命令将不能被预处理器识别。

除转义序列之外,预处理器语句采用与源文件语句相同的字符集。

在预处理器语句中的字符集和可执行程序的字符集是一样的。

预处理器也可识别负字符值。

预处理器可识别如下指令:#d e f i n e#e r r o r#i m p o r t#u n d e f#e l i f#i f#i n c l u d e#e l s e#i f d e f#l i n e#e n d i f#i f n d e f#p r a g m a数字符号(#)是包含预处理器指令的行中的第一个非空白字符。

空白字符可出现在数字符号和指令的第一个字母之间。

某些指令包含参量和值。

指令之后的任何文本(除作为指令一部分的参量或值之外)必须放在单行注释分界符(//)之后或注释分界符(/**/)之间。

预处理器指令可出现在源文件的任何地方,但它们仅用于源文件的剩余部分。

#d e f i n e指令可以用#d e f i n e指令给程序中的常量取一个有意义的名称,其语法的两种形式如下:语法#d e f i n e标识符语言符号字符串o p t#d e f i n e标识符[(标识符o p t ,...,标识符o p t)] 语言符号字符串o p t#d e f i n e指令用语言符号字符串替换源文件中一个标识符的所有出现,标识符仅在它形成一个语言符号时被替换(参见“M i c r o s o f t V i s u a l C++6.0 参考库”的“M i c r o s o f t V i s u a l C++6.0 语言参考手册”卷的第1章“词法规定”中的“语言符号”)。

例如, 若标识符出现在一个注释、一个字符串或作为一个长标识符的一部分之中,它就不被替换。

一个不带语言符号字符串的#d e f i n e指令将移走源文件中每次标识符的出现。

标识符保留其定义且能用#d e f i n e d和#i f d e f测试。

语言符号字符串参量由一系列语言符号组成,如关键字、常量或完整的语句。

一个或多个空白字符可将语言符号字符串和标识符分开。

空白字符不会被认为是被替换文本的一部分,文本最后语言符号之后的空白也不会认为是替换文本的一部分。

形式参数名称出现在语言符号字符串中以标志出实际值被替换的位置, 每个参数名称可在语言符号字符串中出现多次,且可以以任何次序出现。

调用时参量的数目必须与宏定义的参数数目相匹配。

圆括号的自由运用可确保正确地说明复杂的实际参量。

用第二种语法形式可创建类似函数的宏。

这种形式接受一个用圆括号括起的可选参数表。

在最初定义之后引用该标识符,可以使用实际参量替代形式参数的语言符号字符串参量的形式,来替换标识符(标识符o p t ,...,标识符o p t)的每次出现。

表中的形式参数必须用逗号隔开。

该表中的每个名称都必须是唯一的,且此参量表必须包括在圆括号中,标识符和左边的圆括号之间不能有空格。

对于占用多行的长指令可使用行连接,把反斜杠(\)放在换行符前。

形式参数名称的范围延伸到结束语言符号字符串的换行符。

当一个宏以第二种语法形式定义时,参量表后的文本实例就构成一个宏调用。

在源文件中,一个标识符实例后的实际参量必须与宏定义的相应形式参数匹配。

每个语言符号字符串之前无字符串化(#)、字符化(#@)或语言符号粘贴(##)操作符,或其后无##操作符的形式参量,都被相应的实际参量所替换。

在指令替换形式参数之前,实际参量中的任何宏都将被扩展(本章之后的“预处理器操作符”中将介绍这些操作符)。

以下带参量宏的例子说明了#d e f i n e语法的第二种形式://定义光标行的宏#d e f i n e C U R S O R(t o p,b o t t o m)((t o p)<<8)|b o t t o m))//获取指定范围中的一个随机整数的宏#d e f i n e g e t r a n d o m(m i n,m a x)\((r a n d()%(i n t)(((m a x)+1)-(m i n)))+(m i n))有副作用的参量有时会导致宏产生不希望的结果。

一个给定的形式参量在语言符号字符串中可能出现多次。

如果该形式参数被一个有副作用的表达式所替换,则该表达式及其副作用,可能被求值多次(参见本章后面“语言符号粘贴操作符##”中的例子)。

#u n d e f指令可使一个标识符的预处理器定义失效。

有关的更多信息参见#u n d e f 指令。

若一个被定义的宏名称出现在语言符号字符串中(即使是另一个宏扩展的结果),它将不被扩展。

除非第二次定义(#d e f i n e)宏与原定义完全相同,否则重定义一个已定义过的宏将产生一个错误信息。

M i c r o s o f t特殊处→M i c r o s o f t C/C++允许一个宏的重定义,但会产生一个警告信息,说明新的定义与原定义相同。

A N S I C认为宏的重定义是错误的。

例如,下面的宏对C/C++是相同的,但会产生一个警告信息:#d e f i n e t e s t(f1,f2)(f1*f2)#d e f i n e t e s t(a1,a2)(a1*a2)M i c r o s o f t特殊处结束这个例子用于说明#d e f i n e指令:#d e f i n e W I D T H80#d e f i n e L E N G T H(W I D T H+10)第一个说明定义标识符W I D T H为整形常量80,且用W I D T H和整形常量10定义L E N G T H。

L E N G T H的每次出现都用(W I D T H+10)所替换,接着,W I D T H+10的每次出现都用表达式(80+10)替换。

相关文档
最新文档