C语言:带参数的宏定义

宏名的命名规范

1、全部大写有多个单词中间使用下划线隔开(常用)

2、以k开头的驼峰标识(不常用)

带参数的宏定义:把出现宏名地方都会把宏名后面小括号中的参数代入到宏后面的表达式中,然后进行替换

格式:#define 宏名(参数列表)  表达式

注意点:1、参数列表中没有类型

2、宏名与括号之间一定不要加空格

带参数的宏与函数的区别

1、函数有一个调用过程,会开辟新存储空间,需要花费一些开销的

2、宏仅仅是做一个替换的操作

使用场景:

1、当计算比较简单,参数比较少的时候使用宏,宏提高运算效率

2、当逻辑比较复杂、参数多的时候使用函数

宏的注意点:

1、如果你做题,宏仅仅是做一个替换的操作

2、如果自己写宏定义,那么所有出现参数以及运算结果的地方都要加上括号

3、宏有一些固有的缺点是没有办法消除的,在使用带参数的宏的时候不要在参数使用++ -- += -= /= *= %=

时间: 2024-08-07 08:20:17

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

c语言之带参数的宏定义

1.带参数的宏定义中,宏名和新参表之间不能有空格, 2.在带参数的宏定义中,形参参数不分配内存单元,因此不必作类型定义.而宏调用中的实参有具体值,要用它去代换形参,因此必须作类型说明. #include<stdio.h> #include<iostream> #define MAX(a,b) (a>b)?a:b int main() { int x, y, max; x = 2; y = 3; max = MAX(x,y); printf("%d\n",

不带参数的宏定义与带参数的宏定义

宏定义是C提供的三种预处理功能的其中一种,这三种预处理包括:宏定义.文件包含.条件编译 1.不带参数的宏定义: 宏定义又称为宏代换.宏替换,简称“宏”. 格式: #define 标识符 字符串 其中的标识符就是所谓的符号常量,也称为“宏名”. 预处理(预编译)工作也叫做宏展开:将宏名替换为字符串. 掌握"宏"概念的关键是“换”.一切以换为前提.做任何事情之前先要换,准确理解之前就要“换”. 即在对相关命令或语句的含义和功能作具体分析之前就要换: 例: #define PI 3.1415

编程题:带参数的宏定义来实现,求圆的周长和面积。

#include<stdio.h> #define PI 3.14159 #define L(r) 2*PI*(r) #define S(r) PI*(r)*(r) void main() { float radius,circle,area; scanf("%f",&radius); circle=L(radius); area=S(radius); printf("radius:%f\tcircle:%f\tarea:%f\n", radiu

C语言带参数的宏

利用带参数的宏,可以加强封装,简化主体代码.(VC6控制台工程) 1 // 带参数的宏.cpp 2 // 看看带参数的宏是怎么玩的 3 4 //#include "stdafx.h" 注释掉这个头文件,同时在Project——setting——precompiled headers——选择“Not Use Precompiled Header”,能够避免compile出错 5 #include "stdio.h" 6 7 #define prt(cmd) (prin

C语言可变参数在宏定义中的应用

在C语言的标准库中,printf.scanf.sscanf.sprintf.sscanf这些标准库的输入输出函数,参数都是可变的.在调试程序时,我们可能希望定义一个参数可变的输出函数来记录日志,那么用可变参数的宏是一个不错的选择. 在C99中规定宏也可以像函数一样带可变的参数,如: #define LOG(format, ...) fprintf(stdout, format, __VA_ARGS__) 其中,...表示可变参数列表,__VA_ARGS__在预处理中,会被实际的参数集(实参列表)

c语言可变参数与宏定义

宏定义 https://www.cnblogs.com/wzd5230/p/10959032.html https://www.cnblogs.com/xyang0917/p/4172493.html https://blog.csdn.net/wukery/article/details/53286348 //...表示可变参数列表 #define LOG(format, args...) fprintf(stdout, format, args) LOG("%s","12

C语言中带参数的宏

带参数的宏定义有如下的格式: [#define 指令----带参数的宏] #define 标识符(x1,x2,……,xn) 其中  x1,x2,……xn是标志符(宏的参数) 注意:在宏的名字和括号之间必修没有空格. 如果有空格,预处理会认为是在定义一个简单的宏,其中(x1,x2,……,xn)是替换列表的一部分 当预处理器遇到一个带参数的宏,会将定义存储起来以便以后使用.在后面的程序中,如果任何地方出现了标识符(y1,y2……,yn)格式的宏调用(其中y1,y2, ……yn是一些列标记),预处理器

C语言 预处理二(宏定义--#define)

//#define 宏定义(宏定义一般大写) //知识点一-->#define的作用域:从#define开始,从上往下,如果遇到#undef就到#undef处结束,如果没有就是作用于当前整个文件 #include<stdio.h> #include<stdlib.h> //知识点二-->宏定义作用 //宏定义作用1:起到替换作用,可以定义常量 #define X 10 //宏定义作用2:替换代码的任意部分(一般用于易语言,或者加密代码) #define 水乃万物之源 m

sas宏(3)宏,调试宏,创建带参数的宏,理解符号表(全局宏与局部宏解析),宏条件运算符,在宏中进行运算

宏类似于c中的函数,传入指定参数后执行,并且宏内部可以包含data步程序和条件运算符号. 宏变量只是小小的变量....(by the way作用也很大) 1:宏的基本语法 如何创建一个简单的宏并使用? %macro prtlast; proc print data=&syslast (obs=5); title "Listing of &syslast data set"; run; %mend; %prtlast /*不要加分号,加了有可能出错*/ 宏创建过程中做了什