C语言中预处理的示例分析(c语言,开发技术)

时间:2024-04-28 04:56:40 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    #define定义宏带副作用的宏参数

    我们来看如下一段代码

    C语言中预处理的示例分析

    结果分别为12,11,13

    当参数替换后,首先判断表达式 (a++)>(b++)?,判断后a的值加1 b的值加1,然后执行表达式(b++)此时执行的值为12,执行完成后b的值加1,则a的值为11,b的值为13。可以看出对于这种情况下的宏是带有副作用的,可能会导致不可预料的结果

    #define定义宏的优点

    实现以下代码,用函数好还是宏好?

    C语言中预处理的示例分析

    1.用于调用函数和返回代码的时间可能比这个小型计算所需的时间更多,所以宏在速度上和规模上更胜一筹

    2.函数的参数必须声明为特定的类型,所以函数只能在类型合适的表达式使用,而宏则与类型无关,所以如果比较浮点型时使用函数就会有警告

    #define定义宏劣势

    1.每次使用宏时,一段宏定义的代码会插入到代码中,除非宏比较短,否则将大幅增加代码的长度

    2.由于存在信息差,宏是没办法调试的。我们看到的是宏定义的名字,而实际运行是宏定义的代码。例:

    C语言中预处理的示例分析

    C语言中预处理的示例分析

    看似代码没错,但实际上是因为无法调试宏而找不出错误。

    3.宏由于与类型无关,也就不够严谨

    4.宏可能带来运算符优先级的问题,容易导致结果出错

    预处理

    预定义符号

    __FILE__ 进行编译的源文件

    __DATE__ 文件被编译的日期

    __TIME__文件被编译的时间

    __LINE__ 文件当前的行号

    __STDC__若编译器遵循ANSI C标准 则值为1,否则未定义

    预处理指令

    #define 宏定义

    #undef 撤销已定义宏名

    #include 使编译程序将另一源文件嵌入到带有#include的源文件中

    #ifdef 如果定义

    #ifndef 如果未定义

    #endif

    预处理指令为上述以及其他#开头的指令

    条件编译

    能够让语句选择编译或者放弃

    常用于调试性的代码,删除可惜,保留又碍事,或者防止重复头文件多次编译

    1.调试性代码

    C语言中预处理的示例分析

    若未定义,则不会编译其中的代码

    C语言中预处理的示例分析

    2.防止重复的头文件多次编译

    C语言中预处理的示例分析

    还可以用#pragma once

    C语言中预处理的示例分析

     </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
    本文:C语言中预处理的示例分析的详细内容,希望对您有所帮助,信息来源于网络。
    上一篇:如何使用golang生成wasm文件并在浏览器上执行下一篇:

    13 人围观 / 0 条评论 ↓快速评论↓

    (必须)

    (必须,保密)

    阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18