#undef将保持已定义状态且在

作用域内,直到程序结束或者使用#undef 指令取消定义。

预处理器

在此程序中,我们将取消在先前程序中对预处理器的定义。

1

2

3

4

5

6

7

8

9

10

11

#include <iostream.h>

#include<string.h>

#define MAX 5

#undef MAX

void main()

{

char name[MAX]="abcd"; //只能用abcd,否则会提示说超出长度,原因是由于"\0"字符

cout<<"MAX = "<<MAX<<endl;

for(int i=0;i<MAX;i++)

cout<<name<<" "<<endl;

}

得到如下错误消息:

未定义符号 'MAX'

初始值设定项太多

在此程序中对 MAX 定义后又取消了定义。编译该程序时报错。由于未定义 MAX,char name[MAX] 的数组大小不可用,因此编译器发出第二个错误消息。

宏定义

1

2

3

4

5

#define TEST_A 1

#define TEST_CLASS_A clase T1

#include "TEST.h"

#undef TEST_A

#undef TEST_CLASS_A

在这一个文件中使用宏定义:

1

2

#undef TEST_A 1

#undef TEST_CLASS_A clase T1

在#include "TEST.h" 这个文件宏定义,释放掉,就是这个意思,也就是在文件#include "TEST.h" 中宏定义

1

#define TEST_A 1

#define TEST_CLASS_A clase T1 起作用,过了这一语句宏定义就释放掉了,在test.h里,这个宏是有效的,然后出了这个头文件,又无效了。

修改已经宏定义的符号常量的值:

1

2

3

4

5

6

7

8

9

10

#include <stdio.h>

int main( void )

{

#define MAX 200

printf("MAX= %d\n",MAX);

#undef MAX

#define MAX 300

printf("MAX= %d\n",MAX);

return 0;

}

#define和#undefine的用法的更多相关文章

  1. ifndef/define/endif作用和用法

    问题:ifndef/define/endif”主要目的是防止头文件的重复包含和编译,偶只知道这个概念不懂的是怎么个用法,和为什么要用它~~高手请指点一下~~谢谢~~~!!! ------------- ...

  2. const 与define 创建符号常量的 用法与区别

    一.define 的用法: 在c语言中我经常会看到 :#define  PI  12 ,这是创建了一个符号常量,这里面要注意没有那个等于号“=”: 二.const 的用法: 1.const 也可以来创 ...

  3. C++ ifndef /define/ endif 作用和用法

    ifndef/define/endif”主要目的是防止头文件的重复包含和编译 比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,于是问题 ...

  4. ifndef /define/ endif 作用和用法

    问题:ifndef/define/endif"主要目的是防止头文件的重复包含和编译====================================================== ...

  5. #define的3种用法详解

    1.#define 的作用 在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为"宏".被定义为"宏"的标识符称为"宏名".在编译 ...

  6. #define命令的一些高级用法

    =========================================================== define中的三个特殊符号:#,##,#@ ================= ...

  7. 【02】尽量以const,enum,inline替换#define

    1.考虑为什么? 首先,#define不是语言的一部分,而是预编译过程.也就是在编译器编译之前,进行文本替换.考虑#define Pi 3.1425:在编译之前,Pi都会被文本替换为3.1415,因此 ...

  8. SQL:define和verify命令及替换变量&

    =================替换变量&===============使用一个&符号来指定一个变量值,执行SQL语句时,会提示用户输入一个数值. SQL> select sa ...

  9. 读书笔记 effective c++ Item 2 尽量使用const,枚举(enums),内联(inlines),不要使用宏定义(define)

    这个条目叫做,尽量使用编译器而不要使用预处理器更好.#define并没有当作语言本身的一部分. 例如下面的例子: #define ASPECT_RATIO 1.653 符号名称永远不会被编译器看到.它 ...

随机推荐

  1. Windows Phone8开发工具包简述(转载)

    Windows Phone 软件开发包 (SDK) 8.0 可为您提供开发 Windows Phone 8 和 Windows Phone 7.5 应用和游戏所需的工具. 概述Windows Phon ...

  2. vs2010 更新jQuery智能提示包

    vs2010 更新jQuery只能提示包时,可以直接在NuGet中更新 jquery-2.1.0-vsdoc.js jquery-2.1.0.js jquery-2.1.0.min.js jquery ...

  3. 虚拟机之仅主机模式(HostOnly)链接外网设置

    我的环境: 虚拟机-VMware 虚拟系统-CentOS 现实主机-win7 具体设置步骤: 一.设置现实主机 (地址等不用额外设置,下面是我电脑正常上网的配置) 将本地链接设置共享(这步很重要) 二 ...

  4. 开源软件授权协议详解(GPL/MPL/LGPL/BSD/Apache Licence/Creative Commons/MIT)

    开源在今天的软件业已经很普遍,但开源是否意味着使用者可以对开源后的代码为所欲为呢? 答案是否定的. 开源运动同样有自己的游戏规则和道德准则. 不遵行这些规则不但损害开源运动的健康发展,也会对违规者造成 ...

  5. java-mina(nio 框架)

    mina是对nio的具体实现.是目前比较高效和流行的nio框架了. 下面是对使用mina进行通讯的一个简单demo,后面再用mina写一个RPC的简单框架.   mina主要包括: (使用的mina版 ...

  6. FZU2132 - LQX的作业(概率论)

    Problem Description LQX在做作业时遇到一个难题不会做,请你帮她计算一下:在N个独立地分布于0和1之间的随机变量排为非递减顺序之后,这些变量中第M个小于等于x的概率是多少? Inp ...

  7. 绘制3D的托卡马克位形图的matlab脚本文件 ThreeD.m

    % 绘制3D的托卡马克位形图, (V 0.1 by Jiale Chan for Y. H. Huang) % Dee Formula % 特征参数     rzero = 2.0;     rmax ...

  8. Char* ,CString ,WCHAR*之间的转换

    关于Char* ,CString ,WCHAR*之间的转换问题 GDI+所有类的接口函数如果要传递字符串作为参数的话,似乎都用UNICODE串,即WCHAR*.我开始也被整得晕头转向,因为窗口编程所用 ...

  9. 【转】android多分辨率适配

    前一阶段开发android项目,由于客户要求进行多分辨率适配,能够支持国内主流的分辨率手机.因此经过了几次开发走了很多弯路,目前刚刚领略了android多分辨率适配的一些方法. 先介绍一下所走的弯路, ...

  10. UIwebView实现html的离线缓存

    1.html的缓存主要採取ASIHTTPRequest的缓存策略 (1).设置缓存策略 //设置缓存 ASIDownloadCache *cache=[[ASIDownloadCache alloc] ...