C语言中带参宏定义

2023-05-16

#include<stdio.h> 
/*
1.带参宏定义中,宏名和形参表之间不能有空格出现
2.宏定义中不存在值传递,它只是一个符号的替换过程
3.带参宏定义中,形参不分配内存空间,因此不必做类型定义 
*/ 
/* 
#define MAX(a,b) (a>b)?a:b
void main(void)
{
	int x,y,max;
	printf("Plasy input two numbers :");
	scanf("%d %d",&x,&y);
	max=MAX(x,y);
	printf("The max is: %d\n\n",max);
}
*/
/*
4.在宏定义中的形参是标识符,而宏调用中的实参可以是表达式 
*/
/* 
#define SAY(y) (y)  //y可以是一个表达式 
void main()
{
	int i=0;
	char say[]="hello word!";
	while(say[i])
	{
		say[i]=SAY(say[i]);
		i++;
	}
	printf("\n\t%s\n\n",say);
 } 
*/ 
/*
5.在宏定义中,字符串内的形参通常要用括号括起来
以避免出错 
*/
/*
//例1: 
#define SQ(y) (y)*(y)
//#define SQ(y) y*y      (注释部分为不带括号)
void main()
{
	int a,sq;
	printf("input a number:");
	scanf("%d",&a);
	sq=SQ(a+1); // sq=(a+1)*(a+1)
//  sq=SQ(a+1); // sq=a+1*a+1     (不带括号) 
	printf("sq = %d\n",sq);	
} 

//例2:
#define SQ(y) (y)*(y)
//#define SQ(y) ((y)*(y))
void main()
{
	int a,sq;
	printf("input a number:");
	scanf("%d",&a);
	sq=160/SQ(a+1); // sq=160/(a+1)*(a+1) 
	printf("sq = %d\n",sq);	
} 
*/
/*所以在编程过程中应尽量避免使用过多的宏定义
因为在宏调用时由于优先级的存在会很容易出现逻辑错误, 
*/
/*
5.带参数的宏和带参数的函数很相似,但有本质的不同
除以上各点外,把同一表达式用函数处理和用宏处理的
结果有可能是不同的 
*/

//通过带参函数实现 
/*
void main()
{
	int i=1;
	int SQ(int y);
	while(i<=5)
	{
		printf("%d\n",SQ(i++));
	}
} 
int SQ(int y)
{
	return ((y)*(y));
}
*/
 
//通过宏实现
/* 
#define SQ(y) ( (y)*(y) )
void main()
{
	int i=1;
	while(i<=5)
	{
		printf("%d\n",SQ(i++));
	}
} 
*/

/*
6.宏定义可以用来定义多个语句,在宏调用时,把
这些语句又代换到源程序内 
*/
/* 
#include<string.h>
#define STR(s1,s2,s3,sum) strcat(strcat(strcat(sum,s1),s2),s3);
void main()
{
	char str1[]="上帝",str2[]="是",str3[]="笨蛋",str[40]="";
	STR(str1,str2,str3,str)
	printf("\n\tstr1= %s\n\tstr2= %s\n\tstr3= %s\n\tstr= %s\n\n",str1,str2,str3,str);
}
*/
//strcat(str1,str2)函数将字符串str2粘贴到str1的后面 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言中带参宏定义 的相关文章

  • kernel panic

    Linux kernel panic是很难定位和排查的重大故障 一旦系统发生了kernel panic xff0c 相关的日志信息非常少 xff0c 而一种常见的排查方法 重现法 又很难实现 xff0c 因此遇到kernel panic的问
  • PS域业务与CS域业务的区别

    1 CS和PS是针对核心网部分而言的 xff0c 两者的不同在于交换方式 CS是电路交换 xff0c 通信之前 xff0c 资源预留 xff0c 不同用户独占各自分配的资源 xff0c 没有统计复用 PS是包交换 xff0c 不同的用户可以
  • sh_脚本语法

    介绍 xff1a 1 开头 程序必须以下面的行开始 xff08 必须方在文件的第一行 xff09 xff1a bin sh 符号 用来告诉系统它后面的参数是用来执行该文件的程序 在这个例子中我们使用 bin sh来执行程序 当编写脚本完成时
  • 【深度学习系列(三)】:基于CNN+seq2seq公式识别系统实现 (1)

    这段时间一直在做公式识别相关的项目 xff0c 尝试了传统的方法 xff0c 效果不怎么好 想到能不能使用深度学习的方法进行相关方法 然后在github找到了相关代码 xff0c 这里做下分析 具体github地址 xff1a GitHub
  • 困惑多年,为什么printf可以重定向?

    很多人在用printf函数进行串口打印的时候 xff0c 都会被告知需要重定向fputc函数 xff08 别的平台可能不是这个函数 xff09 xff0c 让字符串数据输出到指定串口 xff0c 按照网上的教程也能很快解决 但是却没人告诉你
  • 多线程并发编程

    文章目录 多线程并发编程一 多线程带来的问题相关概念 二 互斥1 互斥与互斥量2 申请互斥量I 静态方法申请互斥量 xff1a II 动态方法申请互斥量 xff1a 3 利用互斥量加锁与解锁4 销毁互斥量5 互斥量综合应用 模拟抢票6 互斥
  • 【嵌入式】---- 串口UART波形分析

    串口参数的配置 波特率 xff08 bit s xff09 xff1a 大多数使用115200 但有些芯片特殊 xff0c 具体要看数据手册中波特率的容错率 比如中微的CMS32L051就不支持115200bps 停止位 xff1a 一般选
  • 手把手教你用JAVA实现“语音合成”功能(文字转声音)标贝科技

    手把手教你用JAVA实现 语音合成 功能 xff08 文字转声音 xff09 标贝科技 前言 什么是语音合成 xff1f 将文本转换成自然流畅的语音 xff0c 本篇文章将介绍 实时在线合成 xff08 文本长度不得超过1024字节 xff
  • cv::imread(cv::String const&, int)’未定义的引用

    在 Makefile文件的195 行 LIBRARIES 43 61 opencv core opencv highgui opencv imgproc 后面添加 xff1a opencv imgcodecs opencv videoio修
  • 【C/C++】C++ 网络多线程编程

    关键词 xff1a C C 43 43 网络编程 多线程 套接字 UDP 前言 学习C 43 43 网络编程多线程编程的目的 xff1a 巩固C 43 43 xff1b 由于C 43 43 大多用于服务器 xff0c 因此网络和多线程是进入
  • 在ubuntu20.04上配置VINS_Fusion(亲测有效,一应俱全)

    最近在做科研训练的时候配置了HKUST Aerial Robotics实验室的VINS Fusion代码项目 xff0c 经历了一些编译报错的问题 xff0c 在网上查找的时候博客内容良莠不齐 xff0c 且实质针对性意见不多 xff0c
  • 无人机项目跟踪记录二十五--无线接收模块的输入输出

    无线接收模块的功能是接收无线遥控器的命令 xff08 应该对应的是无人机上面的无线接收芯片 xff09 xff0c 无人机根据接收的指令进行不同的处理 用同样方法 xff0c 无线接收模块包含的函数是 xff1a Nrf Irq void
  • UDP校验和及代码

    UDP校验和采用反码求和 xff1a 两数相加 xff0c 把超出16位加入到第0位 校验和算法 unsigned short UDPCheck unsigned short data int len int carryBit 61 0 i
  • ROS Moveit:rviz和gazebo仿真出现rviz规划后gazebo没有反应

    在用rviz规划后 xff0c 警告 WARN 1649654675 728414350 42 937000000 Failed to validate trajectory couldn 39 t receive full current
  • Libcurl实现HTTP/HTTPS客户端(支持get、post、保持session)

    前面的文章 Libcurl编译指南 Android和Windows系统 已经就libcurl在Windows和Android系统编做了详细的说明 本文档用C C 43 43 实现简单的HTTP HTTPS客户端 xff0c 支持get和po
  • 基于uart的RS232和RS485总线

    我们之前讲uart的时候就已经提过一个问题 xff0c 就是它并不是直接连接到SOC里面的 xff0c 而是经过了一个芯片的转换 这个芯片的转换就是和我们要说的rs232 485总线有关的 RS232和RS485总线其实本质就是uart 只
  • c语言

    一 c基础 1 1 一个函数遇到return语句就终止了 1 2 system系统调用 xff1a 用命令打开计算器 记事本等 xff0c windows和linux下命令不同 xff0c 需要头文件 xff08 stdlib h xff0
  • [PTA]7-115 祝贺你成年了! (5 分)

    到了18岁 xff0c 你就成年了 xff01 请输入你的年龄 xff0c 如果大于等于18岁 xff0c 则输出 34 Congratulations 34 输入格式 输入一个不超过200的整数A 输出格式 按照要求输出 输入样例 18
  • 教你如何用ffmpeg处理音频格式转换(标贝科技)

    文章目录 前言ffmpeg介绍 xff1f 一 下载与安装1 下载安装包2 设置环境变量3 验证是否安装成功 二 命令讲解1 参数解释2 音频格式转换命令 三 标贝开放平台介绍 前言 ffmpeg介绍 xff1f FFmpeg是一套可以用来

随机推荐