栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

define趣谈——“#define false true“ 和 “#define true false“

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

define趣谈——“#define false true“ 和 “#define true false“

今天在“某脉app”上看见一个有点幽默的帖子,在这个“脉某app”上的楼主问:“怎样才能向别人证明你精通C语言?”,一个人回答:“#define false true”。好一个“黑即是白”。但是当我延申测试的时候,却发现了在define的使用上我一直以来的误区。

都知道define只是单纯的宏替换,在编译期间执行简单的宏替换,无安全类型检查。也就是说下面的第一个测试很容易。

#include

#define false true


int main() {

    if ((1 > 2) == true) {
        std::cout << "第一个可以进" << std::endl;
    }

    if ((1 > 2) == false) {
        std::cout << "第二个可以进" << std::endl;
    }

    if ((2>1) == true) {
        std::cout << "第三个可以进" << std::endl;
    }

    if ((2 > 1) == false) {
        std::cout << "第四个可以进" << std::endl;
    }

    return 0;

}

这个测试很简单。第三个和第四个可以进。

上面是将false全换成true,那如果想要把false换成true,把true换成false呢?很简单,上面的代码再加上一句"define true false",这样就能黑白颠倒了。

但是运行结果却不是自己想的那样的,运行结果发现true还是true,false还是false。这才明白,这两句define成了“负负得正”效果。也就是说,define语句应该是有执行顺序的,编译期间,第一个define替换之后,第二个define再替换。或者有可能编译器在进行替换前,发现define A B 和define B A这样的成对define语句后,会直接不进行A 和 B的宏替换。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/955496.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号