在使用 define 时,我们注意其自身的“边缘效应”,例如:

#define N 2+3
double a;
a = (float)N/(float)2;

在编译时我们预想 a=2.5,实际打印结果却为 3.5 。
原因是在预处理阶段,编译器将 a=N/2 处理成 a=2+3/2,这就是 define 宏的边缘效应。
所以我们应该写成 :#define N (2+3)

#include <stdio.h>
#define N 2+3
//正确写法 #define N (2+3)
int main()
{   double a ;a = (float)N/(float)2;printf("a 的值为 : %.2f", a);   return 0;
}

下面是一个求矩形面积的例子:

#include <stdio.h>
#define LENGTH 10+10
//正确写法 #define LENGTH (10+10)
#define WIDTH  5
#define NEWLINE '\n'
int main()
{   int area;   area = LENGTH * WIDTH;   printf("value of area : %d", area);   printf("%c", NEWLINE);   return 0;
}

以上实例输出结果为:value of area : 60
所以如果我们需要得到正确结果应该将 #define LENGTH 10+10 修改为 #define LENGTH (10+10)

define的边缘效应相关推荐

  1. 关于C语言define的边缘效应

    依旧来自是学弟提问. 先对define的边缘效应进行解释. 在只进行一次define宏定义的时候,或许碰不到边缘效应.但是定义一个宏定义以后有用到宏定义变量接着进行一次宏定义可能会碰见的问题.     ...

  2. 宏#define边缘效应(边际效应)

    #define N 6+3, N 的值是 9. double a; a = (float)N/(float)2; 在编译时我们预想 a=4.5,实际打印结果是7.5 原因是在预处理阶段,编译器将 a= ...

  3. #define 宏的边际效应是什么

    在C语言和C++中,#define宏进行的字符替换,要注意边际效应: 举例一: #define N 2+3 我们预想的N值是5,我们这样使用N,int a = N/2; 我们预想的a的值是2.5,可实 ...

  4. #define宏的边际效应

    在C语言和C++中,#define宏进行的字符替换中,要注意边际效应: #define N 2+3 我们预想的N值是5,我们这样使用N,int a = N/2; //我们预想的a的值是2.5,可实际上 ...

  5. c语言 define宏名称if(参数),iOS深思篇 | 宏定义

    一. 简介 宏是一种批量处理的称谓,简单来说就是根据定义好的规则替换一定的文本.替换过程在程序编译期,也因此大量使用宏会造成编译时间变长:而且替换过程不进行类型安全检查;还需要注意"边缘效应 ...

  6. 非本地类型不能定义方法 cannot define new methods on non-local type time.Duration

    能够随意地为各种类型起名字,是否意味着可以在自己包里为这些类型任意添加方法 ? 参见下面的代码演示 : package mainimport "time"type MyDurati ...

  7. C++ 笔记(32)— 预处理、文件包含include、宏替换define、条件包含ifndef、define

    C/C++预处理器在源代码编译之前对其进行一些文本性质的操作. 它的主要任务包括删除注释 . 插入 #include 指令包含的文件的内容 . 定义和替换由 #defme 指令定义的符号以及确定代码的 ...

  8. C++ #define(宏定义)的使用

    C++ 宏定义 #define命令是C++语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本. 宏定义的一般形式 #define <宏名& ...

  9. C++ 笔记(07)— 常量(字面常量、const定义常量、constexpr 定义常量、enum 定义常量、define 定义常量)

    在 C++ 中,常量类似于变量,只是不能修改.与变量一样,常量也占用内存空间,并使用名称标识为其预留的空间的地址,但不能覆盖该空间的内容. 常量可以是任何的基本数据类型,可分为整型数字.浮点数字.字符 ...

最新文章

  1. [洛谷1383]高级打字机 题解
  2. phpstrom+xdebug调试PHP代码
  3. 二叉树c语言程序插入某个成员,关于C ++:二叉树:插入节点算法
  4. python 是什么类型的语言-为什么说 Python 是强类型语言?
  5. MySQL数据库 高级查询(一)
  6. Vue 项目实现按钮级别权限管理
  7. Linux每次开机都要source /etc/profile的解决方法
  8. foreman源NO_PUBKEY 6F8600B9563278F6
  9. eap和psk_针对WildFly和EAP运行Java Mission Control和Flight Recorder
  10. java caller_js中的caller和callee属性
  11. linux允许所有用户执行文件夹,在Linux中,可以使用命令()针对文件newfiles.txt为所有用户添加执行权限。...
  12. devops工程师_DevOps工程师的认证
  13. 【iOS开发-35】有了ARC内存管理机制,是否还须要操心内存溢出等问题?——面试必备...
  14. 面试大厂,你需要掌握这些面试技巧
  15. 一、ODI教程--ODI的介绍
  16. 文字转语音软件哪个好?这些软件值得收藏
  17. 单进程子进程超时处理方法
  18. 项目团队研发人员离职,如何做好交接?| 每天成就更大成功
  19. win10安装Vmware虚拟机黑屏的解决
  20. 男人30岁之前必须要明白的16条

热门文章

  1. sql 数据库前两列值乘_SQL注入原理和方法汇总
  2. 这一招可以让pdf整篇自动翻译,pdf翻译的方法分享
  3. 实现中英文对接翻译小程序—最终版
  4. Qt编写可视化大屏电子看板系统8-调整间距
  5. LayUI MINI和BootStrop
  6. Python+Vue计算机毕业设计美食网站设计与实现62e76(源码+程序+LW+部署)
  7. 详细解读 PolarDB HTAP 的功能特性和关键技术
  8. ProcessingJoy —— 粒子流逝特效【JAVA】
  9. 【游戏案例学习】涂鸦跳跳笔记
  10. 守望先锋打开黑屏闪退,已经重装过好几次都没用? 真正原因在这里