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: 验收测试、测试策略 (待改进中... )

【额外分享】超深度铁人赛後自我审视

本文同步刊於 Medium 目录 前言 铁人赛 系列文提到的项目 比赛结束之後 区块链 近期规划 未...

Day34 ( 电子元件 ) 小夜灯 ( 光敏电阻 )

小夜灯 ( 光敏电阻 ) 教学原文参考:小夜灯 ( 光敏电阻 ) 虽然 micro:bit 有内建侦...

Day 02 HTML<表格标签>

表格标签主要用来显示以及展示数据,可用表格标签排版後让数据更容易阅读 1. 表格基础标签简易介绍 (...

部署model(serving) on seldon(PVC)

上一篇我们准备好部署model之前的环境, 做了下列事情 安装istio 安装seldon 准备pv...

弹性时间就是最好的知识管理

企业责任不只是说降低失业率而已,对於给金钱和时间,让员工进修也格外重要,倒不一定就是去大学修学分或拿...