C语言之#define用法入门详解

article/2025/9/24 21:55:08

一、#define的基本语法

在C语言中,常量是使用频率很高的一个量。常量是指在程序运行过程中,其值不能被改变的量。常量常使用#define来定义。
使用#define定义的常量也称为符号常量,可以提高程序的运行效率。
其常见的用法包括两种,分别是:

1)#define 宏名 宏值
2)#define 宏名(参数列表) 表达式 

第一种语法就是定义符号常量,
例如:

#define N 100

此后直到#undef N之前, N的值都是100。当遇到#undef N,其后如果再出现N,则N需要重新定义之后才可以使用。

第二种语法常用来定义符号函数。
例如:

#define AREA(x,y) (x)*(y)

表示用来求长和宽分别是x和y的矩形的面积。
需要注意的是,在表达式(x)*(y)中,x和y都要使用“()”括起来,这是因为符号函数在编译时时进行符号形式替换。如果不加()则可能会发生意想不到的错误,例如:

#define AREA(x,y)  x*y
...
A = AREA( 2+3, 1+2 );

此处预期的结果是15,但是实际的结果却是7,这是因为该段代码在编译进行了简单的符号替换而得到的实际表达式是:

A = 2+3 * 1+2;

根据运算符的优先级,先进行乘法运算,然后才是加法,这就导致了错误。
而如果使用

#define AREA(x,y)  (x)*(y)
...
A = AREA( 2+3, 1+2 );

则在编译时替换的结果是:

A = (2+3) * (1+2);

所以实际运行结果是15。

二、#define使用示例

1.表示静态数组的长度
由于定义数组的基本语法规则是:

类型说明符 数组名[常量表达式];

因此“常量表达式”常常是使用#define定义的常量,例如:
Demo1:从键盘输入指定个数的整数序列,然后计算其数学期望和方差。
参考代码为:

#include"stdio.h" 
#define N 10  //定义常量
int main()
{int i, sum, sum2, arr[N] = { 100, 50, 76, 85, 91, 70, 100, 50, 99, 40 };float expn, var;//数学期望,也就是平均值sum = 0;for( i=0; i<N; i++ ) {sum += arr[i];}expn = float(sum) / N;//方差sum2 = 0;for( i=0; i<N; i++ ) { sum2 += (arr[i] - expn) * (arr[i] - expn); } var = float(sum2) / (N-1); printf( "数学期望:%f\n", expn );printf( "方差    :%f\n", var );return 0;
}

运行结果:
在这里插入图片描述
2.定义字符常量
Demo2:从键盘输入一组整数,并计算其和。要求遇到’#’则结束输入。
参考代码:

#include"stdio.h"
#define STOPFLAG '#'
int main()
{int data, sum = 0;char ch;printf( "输入整数(最后一个数据后面加#结束):\n" ); while(1){scanf( "%d", &data );sum += data;ch = getchar();if(ch == STOPFLAG ){break;}}printf( " sum = %d\n", sum );return 0;
}

运行结果:
在这里插入图片描述
3.定义字符串常量
参考代码:

#include"stdio.h"
#define STRING "Hello World."
int main()
{printf( " %s\n", STRING );return 0;
}

运行结果:
在这里插入图片描述
4.定义简单的函数
使用#define定义符号常量函数,且该常量被多次调用,则可以提高程序的运行效率。
Demo4:计算半径R为不同值时圆的面积。
参考代码:


#include"stdio.h"
#define AREA(R) 3.14 * (R) * (R)
int main()
{printf( "R = 1, area = %f\n", AREA(1) );printf( "R = 1+2, area = %f\n", AREA(1+2) );printf( "R = 1+2+1, area = %f\n", AREA(1+2+1) );return 0;
}

运行结果:
在这里插入图片描述
三、#define使用注意事项
1.使用#define定义带有运算符的符号常量时,一定要对每个量都加上圆括号,以避免出现不必要的错误。
2.符号常量同名的问题:

以下写法是正确的

#include"stdio.h" 
#define PROD 2 * 5
#define PROD 2  *  5
int main()
{printf( "%d", PROD );return 0;	
}

但是以下使用#define定义PROD 会提示告警:第三行代码“PROD ”redefiened

#include"stdio.h" 
#define PROD 2 * 5
#define PROD 2*5
int main()
{printf( "%d", PROD );return 0;	
}

也就是说,使用#define定义重复的符号常量时,如果运算符的前后都有空格,则不提示告警,否会提示告警。因此使用#define带有运算符的常数之间的运算需要注意符号常量不要重名。


http://chatgpt.dhexx.cn/article/VJTnAqee.shtml

相关文章

python微信聊天机器人_Python搭建一个微信聊天机器人

前言 因为班群里总是挺静的&#xff0c;所以想着要不放个机器人试试能不能活跃活跃气氛&#xff0c;然后就begin网上查阅资料试着建立个机器人。 语言环境开发环境&#xff1a;Ubuntu16.04 编程语言&#xff1a;Python2.7 步骤第一步&#xff1a;首先安装python2.7语言 su…

Python大佬用20行代码带你打造一个微信聊天机器人(附代码)

近来&#xff0c;打开微信群发消息&#xff0c;就会秒收到一些活跃分子的回复&#xff0c;有的时候感觉对方回答很在理&#xff0c;但是有的时候发现对方的回答其实是驴唇不对马嘴&#xff0c;仔细深究发现&#xff0c;原来对方是机器人。今天&#xff0c;小编就带大家用20行代…

16行代码实现微信聊天机器人,自动智能回复,打团了让它来陪老婆聊天

在我们的生活和工作当中,很多时候我们并不能及时地回复消息,尤其是业务比较多的人,客户给我们发消息我们不回又不好,但又没有那么多精力时时回复,这个时候智能机器人就能帮助我们解决很多问题。 像电商类的客服,像大的QQ群/微信群管理员,以及我们打游戏的时候,挂着脚本…

利用python实现微信聊天机器人(需自己设置关键字及回复内容)

本人为python小白写此帖纪念用python写的第一个脚本 微信聊天机器人 1、通过查找截图进行鼠标点击操作 2、通过直接输入屏幕中的坐标进行鼠标点击操作&#xff08;在复制他人最新信息时采用指定坐标双击&#xff09; # 双击并复制信息 pyautogui.doubleClick(394,…

php个人微信聊天机器人,wxpy将个人微信号变成微信聊天机器人

一、实验环境&#xff1a;win10 python3 wxpy 微信版本&#xff1a;6.6.5 1.1、从官网下载python最新版本并进行安装。 1.2、进入python安装目录Scripts/文件夹下&#xff0c;使用easy_install.exe pip 命令安装pip 1.3、使用pip install wxpy 命令安装wxpy 二、源码文件demo…

一个15分钟的视频,教你用Python创建自己的微信聊天机器人文中赠送全部源代码

你好&#xff0c;我是程序员晚枫。 在社区交流群&#xff08;&#x1f449;传送门&#xff09;里的朋友都知道&#xff0c;社区有一个智能聊天机器人&#xff1a; 1、24小时在线的智能客服&#xff0c; 2、根据大家的提问&#xff0c;自动回复对应的学习资料&#xff0c; 3、对…

微信聊天机器人

做一个微信聊天自动回复的机器人 # -*- coding: utf-8 -*- """ Created on Tue Jun 4 18:30:39 2019author: yyp """#-*- coding:utf-8 -*- import itchat import requestsdef get_response(msg):apiurl http://i.itpk.cn/api.php #//moli机器…

Python Wechaty 微信聊天机器人 padlocal协议搭建指南

python版本推荐3.9 微信机器人框架&#xff1a;Wechaty Python-Wechaty中文手册 开发前需要准备&#xff1a; Linux服务器&#xff08;CentOS 8.0&#xff0c;Python环境&#xff0c;Docker&#xff09;本地Python开发环境&#xff08;我个人使用VSCode&#xff09;申请一个…

用Python写了一个微信聊天机器人

在我们的生活和工作当中&#xff0c;很多时候我们并不能及时地回复消息&#xff0c;尤其是业务比较多的人&#xff0c;客户给我们发消息我们不回又不好&#xff0c;但又没有那么多精力时时回复&#xff0c;这个时候智能机器人就能帮助我们解决很多问题。 像电商类的客服&#…

Python创建微信聊天机器人

最近想着做一个微信机器人&#xff0c;主要想要实现能够每天定时推送天气预报或励志语录&#xff0c;励志语录要每天有自动更新&#xff0c;定时或当有好友回复时&#xff0c;能够随机推送不同的内容。于是开始了分析思路。博主是采用了多线程群发&#xff0c;因为微信对频繁发…

三步轻松打造微信聊天机器人(附源码)

最近微信公众平台开发是热门&#xff0c;我也跟风做了一个陪聊的公众号。 其实类似的自动回话程序早就有了&#xff0c;比如前一阵很火的小黄鸡&#xff08;还是小黄鸭来着&#xff1f;&#xff09;。但尽管是跟风&#xff0c;也要体现一些不同。别人做的都是中文陪聊&#xff…

实现微信聊天机器人-中级篇

一、ChatterBot工作原理 Chatbot Engine的技术框架采用了开源项目ChatterBot (https://github.com/gunthercox/ChatterBot)。 ChatterBot是一个python库,利用它可以轻松的创建对话软件。 一个未经训练的ChatterBot实例开始不知道如何沟通,每次用户输入一个语句,ChatterBo…

微信聊天机器人,不使用iChat,可以群聊

目录 1. 微信聊天界面截图 2. 图片文字识别 3. 获取最新消息 3.1 独聊 3.2 群聊 4. 机器人聊天系统 5. 成果展示 6. 全部代码 本文参考大神【喵王叭】的文章&#xff1a;python实现微信、QQ聊天自动回复【纯物理】_喵王叭的博客-CSDN博客_python自动回复纯物理方式实现微…

tomcat的开发模式和生产模式

tomcat这两种模式对大家的影响主要是在jsp的开发当中。大家都知道jsp需要先编译成servlet源文件并编译为字节码&#xff0c;即生成.class文件才可以执行&#xff0c;所以在jsp文件首次运行时先要进行编译导致运行较慢&#xff0c;之后的访问都会直接进入执行阶段。 在开发模式下…

chrome开发模式下清除缓存问题

介绍&#xff1a; 在开发的时候经常会遇到这样的问题&#xff0c;后台js修改&#xff0c;前台怎么也清除不了缓存的问题&#xff0c;包括使用ctrlf5都没有办法处理,今天教大家一种方式&#xff0c;在chrome中采用开发模式下彻底清除缓存问题 一、打开chrome&#xff0c;随便访…

微信小程序-云开发模式pk传统开发模式【详细】

👨‍🎓作者:bug菌 ✏️博客:CSDN、掘金等 💌公众号:猿圈奇妙屋 🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。 🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。 小伙伴们,说起开发微…

软件开发模式之敏捷开发(scrum)

简介 这几年关于敏捷开发在互联网企业中越来越广泛被使用到&#xff0c;运用的比较多的当属scrum敏捷开发和xp敏捷开发&#xff0c;人人都在谈论敏捷开发。那什么才是敏捷开发呢&#xff1f; 目录 什么是敏捷开发&#xff1f;传统的开发模式和敏捷开发模式的对比&#xff1f…

特性分支开发模式 or 主干开发模式,团队该如何选择?

对于一个具有一定规模的开发团队而言&#xff0c;团队 Devops 的建设都是迈向高效开发的必经之路&#xff0c;即便没有达到 Devops 建设的程度&#xff0c;为了团队中开发之间的高效协作&#xff0c;基于版本管理工具来选择团队合理的代码分支开发模式都是非常重要的一环。对于…

vue项目的三种开发模式

vue项目的三种开发方式 文章目录 vue项目的三种开发方式1.原始无合作开发2.手动模块化开发3.自动模块化开发1、开发流程2、配置webpack-dev-server1.下载安装包2.配置package.json3、配置webpack.config.js4、执行程序5、调试程序 1.原始无合作开发 包含两个文件&#xff1a;v…

介绍两种常见软件开发模式:“敏捷”和“瀑布”

在软件开发时&#xff0c;经常面对的第一个项目实现决策是“我们应该使用哪种开发方法?”这是一个引起很多讨论(和激烈辩论)的话题。如果您以前没有使用过这种方法&#xff0c;那么适当了解开发方法和理论是必要的;简单地说&#xff0c;这是一种组织软件开发工作的方法。这与项…