C语言代码规范(七)#define

#define 宏定义的使用

#define MAX(x, y)    ( ((x) > (y)) ? (x) : (y) )
#define MIN(x, y)    ( ((x) < (y)) ? (x) : (y) )

在宏定义中要把参数用括号扩起来( ((x) > (y)) ? (x) : (y) )。

因为宏只是简单的文本替换,如果不注意,很容易引起BUG。

多用括号也保证宏定义不会对阅读造成歧义。

错误的例子

#include <stdio.h>#define SQR(x)    (x * x)int main(void)
{int a = 0, b = 3;a = SQR(b + 2);printf("a = %d\n", a);return 0;
}

例子中的意图是将b+2的二次方的值赋给a,但是宏定义会展开为a = (b + 2 * b + 2),所以a被赋值为11,而不是25。

因此宏定义应该修改为

#define SQR(x) ((x) * (x))

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

http 二进制_浅谈HTTP协议

HTTP一、HTTP协议http协议&#xff0c;是超文本传输协议&#xff0c;此协议是基于TCP/IP的协议&#xff0c;是互联网上应用最为广泛的一直网络协议是一种无状态协议&#xff0c;默认端口为80,。设计HTTP的最初目的是为了提供一种发布和接受HTML页面的方法。通过HTTP或者HTTPS协…

linux redis客户端_为什么单线程Redis能那么快?

我们通常说&#xff0c;Redis 是单线程&#xff0c;主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的&#xff0c;这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能&#xff0c;比如持久化、异步删除、集群数据同步等&#xff0c;其实是由额外的线…

C语言开发笔记(七)const和指针

const修饰变量是常用的&#xff0c;不容易犯错&#xff0c;而const和指针一起使用时很容易混淆。 (一)const int *p #include <stdio.h>int main(void) {int a 10;int b 20;const int *p &a;*p b;return 0; } const在int *的左侧&#xff0c;即指针指向内容为…

ubuntu php 无法执行exec_利用webhook使php项目自动部署

php中文网最新课程每日17点准时技术干货分享1.先来讲一下自动部署的原理&#xff0c;一般在我们push代码的时候&#xff0c;可以自动请求webhook中设置的url&#xff0c;完成一次请求与响应。那么只要我们设置的url地址请求的php文件内容是执行命令行git push命令&#xff0c;则…

C语言开发笔记(八)static

在C语言中&#xff0c;static有3个作用&#xff1a; &#xff08;1&#xff09;在函数体&#xff0c;一个被声明为静态的变量在这一函数体内被调用的过程中维持其值不变。 #include <stdio.h>void test(void) {static int i 0;printf("%d\n", i); }int main…

ppt修复无法读取_移动硬盘故障分析以及建议修复方法

移动硬盘中存储了大量的重要数据&#xff0c;一旦出现什么问题&#xff0c;会让人急得焦头烂额。换个硬盘倒是件小事&#xff0c;但其中资料、数据的丢失更令人懊恼。而在硬盘使用的过程中&#xff0c;由于使用者一时的不注意&#xff0c;往往就很容易造成意外的问题。接下来&a…

(原创)c#学习笔记04--流程控制01--布尔逻辑03--运算符优先级

转载于:https://www.cnblogs.com/wodehao0808/p/4896018.html

m.2接口和nvme区别_NVMe/SATA SSD有啥不一样?萌新怎么选

随着NAND技术的升级迭代&#xff0c;堆栈层数不断提高使得SSD单位容量成本不断下降&#xff0c;消费级市场基本已经成为了SSD的天下。目前主流的SSD大致有两种接口&#xff0c;分别是M.2和SATA两种类型。NVMe/SATA有啥区别SATA接口的SSD执行的AHCI协议标准&#xff0c;是目前较…

带有NetBeans 7.1 RC 2的WebLogic 12c快速入门

WebLogic服务器12c停运了几天。 它是针对“裸露”的Java开发人员的–花哨的Fusion Middleware东西将继续沿线升至12c。 因此&#xff0c;这基本上是我要运行的版本。 今天&#xff0c;我为您提供了一个最新的NetBeans 7.1&#xff08;RC 2&#xff09;和WebLogic的快速入门 &am…

python爬虫反爬机制_Python Scrapy突破反爬虫机制(项目实践)

对于 BOSS 直聘这种网站&#xff0c;当程序请求网页后&#xff0c;服务器响应内容包含了整个页面的 HTML 源代码&#xff0c;这样就可以使用爬虫来爬取数据。但有些网站做了一些“反爬虫”处理&#xff0c;其网页内容不是静态的&#xff0c;而是使用 JavaScript 动态加载的&…

自定义URL Scheme完全指南

iPhone / iOS SDK 最酷的特性之一就是应用将其自身”绑定”到一个自定义 URL scheme 上&#xff0c;该 scheme 用于从浏览器或其他应用中启动本应用。 注册自定义 URL Scheme 注册自定义 URL Scheme 的第一步是创建 URL Scheme — 在 Xcode Project Navigator 中找到并点击工程…

P6 音频格式—— AAC

目录 前言 01 AAC是什么&#xff1f; 02 为什么需要进行AAC进行音频压缩处理&#xff1f; 03 AAC的特点以及优势 04 AAC格式详解&#xff1a; 4.1. ADIF的数据结构&#xff1a; 4.1.1 ADIF Header具体的表格: 4.2. ADTS的结构&#xff08;重点&#xff09;&#xff1a; …

Android开发笔记——ListView模块、缓存及性能

ListView是Android开发中最常用的组件之一。本文将重点说明如何正确使用ListView&#xff0c;以及使用过程中可能遇到的问题。 ListView开发模块图片缓存可能遇到的问题一、ListView开发模块 从项目实践的角度来看&#xff0c;ListView适合“自底向上”的开发模式&#xff0c;即…

python实现excel筛选功能并输出_python如何实现excel按颜色筛选功能

离岛 2020-07-09 09:37 已采纳 不太了解具体需求&#xff0c;提供一些示例代码和思路供你参考&#xff1a; 整体思路&#xff1a;首先已知excel中的颜色值&#xff0c;根据编码实现颜色筛选的功能 示例&#xff1a; 1、首先安装pip install openpyxl 2、示例代码可以获取Excel中…

C学习杂记(七)extern声明可省略变量类型

工作三年&#xff0c;看C的书也不少。第一次知道extern可以省略变量类型。 b.c有一个全局变量unsigned int data_length&#xff0c;a.c想要调用它&#xff0c;通常使用: extern unsigned int data_length&#xff1b; 在声明时可以把外部变量类型去掉&#xff1a;extern da…

linux 内存取证_【取证流程】电子数据证据远程勘验

原创&#xff1a;弘连网络电子数据证据远程勘验在日常的取证工作中必不可少&#xff0c;但由于存在信息安全差、数据可能被篡改的问题。取证过程中&#xff0c;有明确的取证要求来确保取证过程的规范显得至关重要&#xff0c;今天我们就一起来回顾下遇到远程勘验的取证场景&…

python2 print_Python2和Python3中print的不同点

在Python2和Python3中都提供print()方法来打印信息,但两个版本间的print稍微有差异 主要体现在以下几个方面&#xff1a; 1.python3中print是一个内置函数&#xff0c;有多个参数&#xff0c;而python2中print是一个语法结构&#xff1b; 2.Python2打印时可以不加括号&#xff…

java 与 c#的 中 字符串比较“==”与“equals”的差异

.net中&#xff0c;其字符串特有的驻留机制&#xff0c;保证了在同一进程中&#xff0c;相同字符序列的字符串&#xff0c;只有一个实例&#xff0c;这样能避免相同内容的字符串重复实例化&#xff0c;以减少性能开销。 先来回顾一下c#中的代码&#xff1a; public static void…

visual studio 2019 未能在命名空间“System.IO.Ports”中找到类型名“SerialPort”

在vs2019以前的版本&#xff0c;只要using System.IO.Ports就可以用SerialPort。 这里需要自己手动添加相关引用。 工具–>Nuget包管理器&#xff08;N&#xff09;–>管理解决方案的Nuget程序包&#xff08;N&#xff09; –>浏览&#xff0c;左边搜索SerialPort 右…

python开发环境功能介绍_第一模块 第3章 Python介绍与环境配置

python入门(全为重点) 1. 编程语言介绍 编程语言分类、总结 2. python介绍 3. 解释器多版本共存 4. 运行python程序的两种方式 5. 一个python程序运行的三个步骤&#xff08;******&#xff09; 6. 注释 7. IED集成开发环境 3.1 编程语言分类之低级语言 这里的高级/低级指的是离…