30天学会C语言: Day 11-什麽都可以取名字

前置处理器(Preprocessor)

在程序码最前面内容,编译前编译器会依照这些内容进行不同的处理
所有前置处理器都是 # 开头

#include

最一开始讲到的 #include 就是前置处理的一种,用来引入函式库

#define

另一种是 #define,有两种功能

定义文字

语法是:

#define <目标文字> <替换文字>

可以想成是在执行编译前,编译器会把程序码档案中所有 <目标文字> 替换成 <替换文字>

下面程序码在编译前,所有 NUMBER 都会被替换成 int,也就是说在这段程序码中,NUMBERint 是一样的

#include<stdio.h>
#include<stdlib.h>
#define NUMBER int 

int main(){
	NUMBER a=100;
	printf("%d", a);

	return 0;
}

也可以定义运算子和函式

#include<stdio.h>
#include<stdlib.h>
#define ADD +
#define SHOW

int main(){
	int a= 100 ADD 9;
	SHOW("%d", a);

	return 0;
}

虽然可以定义任何的内容,但通常只拿来定义常数(数字、字串、字元)

#include<stdio.h>
#include<stdlib.h>
#define MAX 100
#define ERROR_MESSAGE "Too large!!!"

int main(){
	int x;
	scanf("%d", &x);
	if(x>MAX)
		printf(ERROR_MESSAGE);
	else
		printf("OK");

	return 0;
}

#define 定义常数可以增加不少方便性:

  • 像是变数一样可以帮数值命名,增加程序的可读性
  • 不像是变数,用 #define 可以确保执行过程数值不变
  • 当程序中有很多地方都用到同一个数时,只要修改定义就可以

定义函式

虽然大部分时候会尽量避免,不过 #define 也可以用来定义函式,语法是:

#define <函式名称>(<参数>) <定义>

下面的 SUM 有两个参数 a, b,回传两者的和

#include<stdio.h>
#include<stdlib.h>
#define SUM(a, b) a+b

int main(){
	int x,y;
	scanf("%d%d", &x, &y);
	printf("%d\n", SUM(x, y));
	
	return 0;
}

实际上用 #define 定义的函式,执行速度会比自订函式还快,但函式功能复杂时不好编写,且容易造成执行结果错误


挖坑清单:

  • main() 前面的 int,和最後一行的 return 0;
  • 可以拆成多行的情况
  • 指标

<<:  Day 12 Generics Part 2

>>:  Day 12: 验收测试、测试策略 (待改进中... )

DAY23-一般页面设计

前言: 做完网站最基本的导览功能後,接下来要进入的就是我们的页面了!在制作页面的同时, 阿森也会善...

EP 03 - Hash ID 计算

Youtube 频道:https://www.youtube.com/c/kaochenlong ...

Day 29 Google Play评论爬取

今天的影片内容为爬取Google Play网页版应用程序的评论 并将前几天爬取AJAX网页(Dcar...

[Tableau Public] day 4:尝试制作不同种类的报表-1

终於到第四天了,难熬的星期六放假日,为了完成这项意志力挑战,我还是起了个大早~ 今天我们来尝试制作地...

第48天~

这个得上一篇:https://ithelp.ithome.com.tw/articles/10258...