文中没有讲解到的知识点在我其他文章中可以找到,在这里不重复赘述。
无参宏定义
1、理解宏定义
例题:输入一个数字,计算以它为半径的圆的面积
定义了一个没有参数的函数void fun(void)
用函数
以上使用的既有宏定义【# define PI 3.1415926】(第2行)又有函数的声明(顶部第4行)【void fun(void)】、定义(底部第26行)【void fun(void)】和调用 (中间第19行)【fun();】
用定义
2、define与typedef
3、不用循环和递归,打印0~999
这个是打印0~9999
带参宏定义
1、理解定义
定义了一个有参数的函数MAX(a,b),后面是这个函数的定义表达式,其中a,b是形式参数
2、大无语事件
计算5以内的数值的平方值
以上采用的是函数的声明调用和定义,正常计算,可得出正确的值,其中y是函数的变量参数,第10行中SQ(i++)里的i++是y增值的表达式
以下采用的是定义的方式
第二张截图里第10行,i++作为了SQ的实际参数,带入SQ中去算即为((i++)*(i++))
在第一次循环中,i 初始值为1。先赋值,第一个y=1。后自加,第二个y=2。所以输出结果里的值2是这么得来的:1x2
再次循环进行 i ++计算,即 i =3,依旧小于5,所以先赋值,第一个y=3。后自加,第二个y=4。第二个值12=3x4这样算出来的
第二次循环结束时 i =4,第三次进行 i ++计算,即 i =5,已经不小于5,所以结束运算。
3、一些例子
(1)要注意输出形式
将三段话分别输出以及连成一句话输出
其中 scrcat 的原型为extern char *strcat(char *dest, const char *src); 在C中,函数原型存在 <string.h>头文件中。在C++中,则存在于头文件中。用于将两个char类型连接。例如:
char a[18]=“hello”;
char b[20]=“word”;
strcat(a,b);
printf("%s",a);
输出 d 为 helloword (中间无空格)
a和b所指内存区域不可以重叠且a必须有足够的空间来容纳b的字符串。
(2)开关一样的东西
str[0]=1,看输出
str[0]=0,看输出
条件编译
有三种形式(百度百科).
1、if格式
#if 表达式
语句序列①
#else
语句序列②
#endif
功能:当表达式的值为真时,编译语句序列①,否则编译语句序列②。其中,#else和语句序列②可有可无。
当# ROUHD 1时执行if下的语句,结果为圆的面积
当# ROUHD 0 时执行else下的语句,结果为正方形的面积
2、ifdef格式
#ifdef 标识符
语句序列①
#else
语句序列②
#endif
功能:当标识符已被定义时(用#define定义),编译语句序列①,否则编译语句序列②。其中#else和语句序列②可有可无。
3、ifndef格式
#ifndef 标识符
语句序列①
#else
语句序列②
#endif
功能:该格式功能与ifdef相反。