mirror of
https://github.com/Aexiar/c.git
synced 2024-10-22 14:05:45 +02:00
2024年10月9日 14:32
This commit is contained in:
parent
3b11b74907
commit
03bc13b952
@ -428,6 +428,161 @@ void func() {
|
||||
|
||||
|
||||
|
||||
* 示例:使用函数来获取两个数中的较大的数
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
|
||||
/**
|
||||
* 获取两个整数中的最大值
|
||||
* @param a
|
||||
* @param b
|
||||
* @return
|
||||
*/
|
||||
int max(int a, int b) {
|
||||
return a > b ? a : b;
|
||||
}
|
||||
|
||||
int main() {
|
||||
|
||||
// 禁用 stdout 缓冲区
|
||||
setbuf(stdout, nullptr);
|
||||
|
||||
int a = 10;
|
||||
int b = 20;
|
||||
|
||||
int maxValue = max(a, b);
|
||||
|
||||
printf("maxValue = %d\n", maxValue); // maxValue = 20
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
* 示例:使用带参宏定义来获取两个整数中的最大值
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
|
||||
#define MAX(a, b) a > b ? a : b // [!code highlight]
|
||||
|
||||
int main() {
|
||||
|
||||
// 禁用 stdout 缓冲区
|
||||
setbuf(stdout, nullptr);
|
||||
|
||||
int a = 10;
|
||||
int b = 20;
|
||||
|
||||
int maxValue = MAX(a, b);
|
||||
|
||||
printf("maxValue = %d\n", maxValue); // maxValue = 20
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
## 3.2 使用细节和注意事项
|
||||
|
||||
* ① 带参宏定义中,形参之间可以出现空格,但是宏名和形参列表之间不能有空格出现。
|
||||
* ② 在带参宏定义中,不会为形式参数分配内存,因此不必指明数据类型,而在宏调用中,实参包含了具体的数据,要用它们去替换形参,因此实参必须要指明数据类型。
|
||||
* ③ 在宏定义中,替换文本内的形参通常要用括号括起来以避免出错。
|
||||
|
||||
|
||||
|
||||
* 示例:演示 ①
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
|
||||
#define MAX (a, b) a > b ? a : b // [!code highlight]
|
||||
|
||||
int main() {
|
||||
|
||||
// 禁用 stdout 缓冲区
|
||||
setbuf(stdout, nullptr);
|
||||
|
||||
int a = 10;
|
||||
int b = 20;
|
||||
|
||||
// MAX 就相当于 (a, b) a > b ? a : b
|
||||
// MAX(a, b) 就相当于 (a, b) a > b ? a : b(a, b)
|
||||
int maxValue = MAX(a, b); // [!code error]
|
||||
|
||||
printf("maxValue = %d\n", maxValue);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
* 示例:演示 ③
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
|
||||
// 带参宏定义,字符串内的形参通常要用括号括起来以避免出错
|
||||
#define SQ(y) (y) * (y) // [!code highlight]
|
||||
|
||||
int main()
|
||||
{
|
||||
int a, sq;
|
||||
printf("input a number: ");
|
||||
scanf("%d", &a);
|
||||
|
||||
// 宏替换为 (a+1) * (a+1)
|
||||
sq = SQ(a + 1); // [!code highlight]
|
||||
printf("sq=%d\n", sq);
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
## 3.3 带参宏定义和函数的区别
|
||||
|
||||
* ① 宏展开仅仅是文本的替换,不会对表达式进行计算;宏在编译之前就被处理掉了,它没有机会参与编译,也不会占用内存。
|
||||
* ② 函数是一段可以重复使用的代码,会被编译,会给它分配内存,每次调用函数, 就是执行这块内存中的代码。
|
||||
|
||||
|
||||
|
||||
* 示例:使用函数计算平方值
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
|
||||
/**
|
||||
* 求平方值
|
||||
* @param y
|
||||
* @return
|
||||
*/
|
||||
int SQ(int y) {
|
||||
return ((y) * (y));
|
||||
}
|
||||
|
||||
int main() {
|
||||
|
||||
for (int i = 1; i <= 5; i++) {
|
||||
printf("%d^2 = %d\n", i, SQ(i));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
* 示例:使用带参宏定义计算平方值
|
||||
|
||||
```c
|
||||
```
|
||||
|
||||
|
||||
|
||||
# 第四章:文件包含
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user