标题:关于宏定义中#undef的使用的问题
只看楼主
wangcaiqusi
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2013-1-10
结帖率:60%
已结贴  问题点数:20 回复次数:4 
关于宏定义中#undef的使用的问题
#undef 是在后面取消以前定义的宏定义
该指令的形式为
#undef 标识符
其中,标识符是一个宏名称。如果标识符当前没有被定义成一个宏名称,那么就会忽略该指令。
我要问的是,如果#undef后面没有东西会怎么样
代码如下
第一,正常输出31.4,无#undef
#include "stdio.h"
#define YUAN 3.14
void display();
int main()
{
    display(YUAN);
    return 0;
}

void display(double a)
{
    double s;
    printf("s =  %lf\n",a*10);
   
}
第二无输出,有#undef,
#include "stdio.h"
#define YUAN 3.14
void display();
int main()
{
#undef       //undef后面没有写宏名,问题是没有输出,怎么破?
    display(YUAN);
    return 0;
}

void display(double a)
{
    double s;
    printf("s =  %lf\n",a*10);
   
}
搜索更多相关主题的帖子: include display 标识 double 
2013-01-24 14:49
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:20 
预处理器在解读源代码文本的时候,遇到#undef,就会放弃宏替换,从此往后所有YUAN字样都被视为标识符,不再用3.14替换掉YUAN。

说到底,还是把宏替换当作标识符的误区。

授人以渔,不授人以鱼。
2013-01-24 16:41
wangcaiqusi
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2013-1-10
得分:0 
可是我#undef后面没有宏名啊。结果没有输出,这是为什么?
2013-01-25 14:02
wangcaiqusi
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2013-1-10
得分:0 
如果#undef后面有宏名的话,会提示语法错误,YUAN没有定义,这个理解
2013-01-25 14:03
wangcaiqusi
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2013-1-10
得分:0 
还有一个关于文件包含的问题,我百度上有一条:被包含文件中的静态全局变量不用在包含文件中声明
以下是代码
#include "stdio.h"
#include "nima.h"

int main()
{
    point a;
    a.x = 2.0;
    a.y = 3.0;
    b = 5;
    printf("%lf\n%lf\n",a.x,a.y);
    printf("%d\n",b);
    return 0;
}
以下是nima.h中的文件
typedef struct
{
    double x;
    double y;
}point;
static int b;
我要问的是为什么静态全局变量b可以正常输出,这个有悖于上面百度的那一条啊
2013-01-25 14:52



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-397495-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020620 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved