• 宏 ~ 2


    /*            #define
        #define<名字><值>
        注意没有结尾的分号,因为不是C的语句
        名字必须是一个单词,值可以是各种东西
        在C语言的编译器开始之前,编译预处理程序
        (cpp)会把程序中的名字换成值
            完全的文本替换

                宏
        如果一个宏的值中有其他的宏的名字,也会被替换的
        如果一个宏的值超过一行,最后一行之前的行末需要加
        红的值后面出现的注释不会被当做宏的值的一部分
    */
    /*
            没有值得宏
        #define_DEBUG
        这类宏是用于条件编译的,后面有其他的编译预处理
        指令来检查这类宏是否已经被定义过了

            预定义的宏
        _LINE_   源代码件的行号
        _FILE_     源代码的文件名    
        _DATE_   源代码编译时的日期
        _TIME_   源代码编译时的时间
        _STDC_
    */
    /*
    #include<stdio.h>

    int main(int argc,char const *argv[])
    {
    //    printf("%s:%d ",_FILE_,_LINE_);
        printf("%s,%s ",_DATE_,_TIME_);
        return 0;
    }      //不知道怎么回事,我的DVC++通不过去
    */
    /*
    #include<stdio.h>

    #define pi 3.14159
    #define format "%f "
    #define pi2 2*pi   //pi *2 编通过译能

    int main(int argc,char const *argv[])
    {
        printf(format,pi2*3.0);//18.849540
        return 0;
    } */
    //        像函数的宏
    //#define cube(x)((x)*(x)*(x))
    //宏可以带参数
    /*
    #include<stdio.h>
    #define cube(x) ((x)*(x)*(x))
    int main(int argc,char const *argv[])
    {
        printf("%d ",cube(2));
        return 0;
    */
              //初学者容易犯的错误
    #include<stdio.h>

    #define mistake1(x) (x*3.0)
    #define mistake2(x) (x)*3.0

    int main(int argc,char const *argv[])
    {
        printf("%f ",mistake1(5+2));//21.0
        printf("%f ",18/mistake2(2));//3.0
        return 0;
    }
    /*      11.000000      5+2*3
            27.000000      18/2*3
    所以
            带参数的宏的原则
        一切都要括号
        整个值要括号
        参数出现的每个地方都要括号
    #define answer(x) ((x)*3.0)

            带参数的宏
        可以带多个参数
        #define min(a,b) ((a)>(b)?(b):(a))
        //如果成立是b ,否则是a
        也可以组合(嵌套)使用宏
        
        宏定义的时候一定不要在结尾加分号
        
            带参数的宏
        在大型程序的代码中使用非常普遍
        可以非常复杂,如“产生函数”
            在#和##这两个运算符的帮助下
        存在中西方文化差异
        部分宏会被inline函数代替
    */








































































  • 相关阅读:
    企业应用的互联网化
    企业应用开发平台GAP平台
    技术有什么用?
    Samba服务器配置
    IT从业人员需要知道的10个小秘密
    在雪豹10.6.2(Mac OS X)上安装Oracle10g
    项目经理的职责
    通过堡垒机远程连接Windows Server
    MySQL:Data truncated for column 'last_apply_time' at row 1
    当有莫名其妙的错误里, 可以
  • 原文地址:https://www.cnblogs.com/lijianmin6/p/10363318.html
Copyright © 2020-2023  润新知