提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、宏定义
1.使用规则
#define 标识符 字符串
#define PI 3.1415926
本质:字符串的替换
运行阶段:在程序的预处理阶段
2.注意
注意:
(1)宏名一般要大写(书写习惯,也可以用小写),将系统中本来存在的一些变量名区分开
(2)使用宏名代替字符串,可以减少书写重复字符串的工作量
(3)宏定义不是c语句,不必在行末加分号,会将分号当成字符串的一部分替换
(4)作用域:一般宏定义都会定义在函数的外部,作用域就是从宏定义开始到程序最后一行
(5)固定作用可以设置为,#define PI 3.14----->一直到#undef PI
(6) 在进行宏定义的时候可以进行叠加
(7)如果在使用的时候用引号括起来那么则不会进行等量替换,如"PI",会直接当成字符串而不是标识符。
(8)与定义变量不同,在程序的预编译阶段进行替换,直接进行替换不会重新开辟新的内存
#include <stdio.h>
#define PI 3.14
#define R 2
#define S PI*R*R
#define L 2*PI*R
int main(int argc, const char *argv[])
{
printf("L=%f\nS=%f\n",L,S);
return 0;
}
二、带参宏
1.定义
不是进行简单的字符串替换,还要进行参数替换
定义形式为:#define 宏名(参数表) 字符串
#define S(a,b) a*b
2.注意
(1)宏名后面不能有空格,有空格会被认为是字符串的一部分
(2)带参宏只是将参数后面的字符串进行替换,不会考虑运算的优先级。
#define PI 3.1415926
//#define S(r) PI*r*r
//如果传两个参数就会变变成,s=3.1415926*a+b*a+b;这样运算的优先级会出问题
//如果要使运算的优先级没有问题则写成下面的这种形式
#define S(r) PI*(r)*(r)
int main(int argc, const char *argv[])
{
float a = 2;
float b = 3;
float s = 0;
s=S(a+b);
printf("sum=%f\n ",s);
return 0;
}
三、带参函数
1.带参函数的宏与带参宏的区别
(1)带参方式:带参宏函数先进行实参的计算,然后将实参带入形参,带参宏只是进行简单的字符串替换。
(2)执行时间:带参宏函数是在程序运行时进行处理会为形参分配内存单元,带参宏只是在程序的预编译阶段进行没有值传递、没有内存的分配、没有返回值。
(3)形参类型:带参宏函数有实参形参,如果类型不匹配要进行类型转换,带参宏则只是进行字符串的替换。
(4)函数不会使代码体积增大,带参宏回使代码体积增大
2.带参宏函数和普通函数区别:
(1)普通函数只有一个返回值,但是带参函数可以返回多个结果。
(2)带参宏函数是进行展开会使源代码变长,调用次数变多代码会越长,调用函数不会使源代码变长。
(3)宏替换只是在预编译阶段进行,会占用编译时间,函数则是在运行阶段会占用程序的运行时间。
#include <stdio.h>
#define PI 3.1415926
#define CIRCLE(R,S,L,V) S=2*PI*R*R;L=2*PI*R;V=4/3*PI*R*R*R
int main(int argc, const char *argv[])
{
float R,S,L,V = 0;
R = 2;
CIRCLE(R,S,L,V);
printf("R=%f S=%f L=%f V=%f\n",R,S,L,V);
return 0;
}
举例:带参宏函数一般用于实现功能比较简单的函数
#include <stdio.h>
#define MAX(a,b) (a)>(b)?a:b
#define MIN(a,b) (a)<(b)?a:b
int main(int argc, const char *argv[])
{
printf("ret%d\n",MAX(1,2));
printf("ret%d\n",MIN(1,2));
return 0;
}
四、条件编译
让一部分代码满足一定的条件进行编译
项目 | Value |
---|---|
#define | 定义宏 |
#ifdef | 如果定义该宏,则执行代码加入编译 |
#ifndef | 如果没定义该宏,则将代码加入编译 |
#if | 如果条件为逻辑真值,则将代码加入编译 |
#elif | 如果条件为逻辑真值,则将代码加入编译 |
#else | 逻辑假,则将代码加入编译 |
#include <stdio.h>
#define _w_32
#define _w_16
int main(int argc, const char *argv[])
{
#ifdef _w_32
printf("sizeof int is 4 bytes\n");
#endif
#ifdef _w_16
printf("sizeof int is 2 bytes\n");
#endif
#if _WIN_
printf("windows is good\n");
#elif _LINUX_
printf("linux is good\n");
#else
printf("unix is good\n");
#endif
return 0;
}
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。