野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13780|回复: 2

关于预编译指令,求答案

[复制链接]
发表于 2015-2-6 15:22:16 | 显示全部楼层 |阅读模式
typedef enum
{
    A = 0,
    B = 1,
}TTT;


#if (B == 1)
    printf("B=1");
#elif (B == 0)
    printf("B=0");
#else
    printf("error");
#endif

今天看到山外哥的一个题目,求解析,求答案。

回复

使用道具 举报

发表于 2015-2-6 19:23:06 | 显示全部楼层
结果是输出B = 0 。

虽然你在
typedef enum 里有个元素是B=1,但这个B和你条件编译里的B没有关系。

实际上B是未定义的符号,编译器会把未定义的符号都当成0。同样道理,你把

#if (B == 1)
    printf("B=1");
#elif (B == 0)
    printf("B=0");
#else
    printf("error");
#endif

改成
#if (AAAAB == 1)
    printf("AAAAB=1");
#elif (AAAAB == 0)
    printf("AAAAB=0");
#else
    printf("error");
#endif

结果仍然是输出AAAAB = 0

除非你在代码前面加一个关于AAAAB的宏定义 #define AAAAB 1
这样结果就不一样了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-9 16:54:20 | 显示全部楼层
B在枚举变量中有定义过呀,为什么是没定义的呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-7-6 20:27 , Processed in 0.024519 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表