预处理
#include
hello.c
gcc hello.c //编译
预处理 (预编译)
汇编 (汇编语言) ---助记符
编程:
人类语言 --->编程语言(C语言)---汇编语言--->机器语言(01010)
八位的单片机 0101 0101 //加法
//0101 0101
16位
32位 0101 0101 0101 0101 0101 0101 0101 0101 //add
64位
main()
{
int a = 1;
int b = 2;
printf("hello world! %d \n",a+b);
}
a.out //
-----------------------------------
编译过程:
预处理
编译
汇编
链接
预处理:
1.宏定义
2.文件包含
3.条件编译
1.宏定义 --- 定义了符号常量
#define 标识符 字符串
#define 宏名 宏值
#define N 100
表示,定义了一个宏 (符号),而这个符号 代表的值 就是100
#define 宏名(参数) 宏值
说明:
1. 预处理阶段,只做文本原样替换
2. 宏 就是用 宏值 将 宏名 原样替换
3. 用途
当作常量来用
好处,可以做到 一改全改,方便操作
4. 宏名
符合标识符命名规则
宏名,一般都是大写 --- 主要是为了和普通变量名区分
5. 程序中 处于 ""中的 宏名 不会被替换
6. 宏名 不要和关键字重名
7. 宏替换过程中,存在宏的副作用 ---- 文本的原样替换
处理:
能加括号的尽量都加括号
8. 宏定义 只能放在一行
练习:
从键盘输入 圆的半径,求出圆的周长和面积
L = 2 * π * r
S = π * r * r
#include
#define PI 3
int Z(int r)
{
return 2*PI*r;
}
int M(int r)
{
return PI*r*r;
}
int main(int argc, const char *argv[])
{
int r;
scanf("%d",&r);
printf("%d\n",Z(r));
return 0;
}
π 常量
#define PI
练习:
用带参宏,实现找两个数中的最大值
#include
#define ADD(a,b) a+b
#define MUL(a,b) ((a)*(b))
#define MAX(a,b) ((a)>(b)?(a):(b))
#define N 10
void test(void);
int main(int argc, const char *argv[])
{
int max;
max=MAX(1,2);
printf("max=%d\n",max);
printf("N=%d\n",N);
// printf("result = %d\n",MUL(1+1,2+2));
return 0;
}
#undef N
void test(void)
{
printf("test N=%d\n",N);
}
文件包含
#include "文件名" //首先在当前路径下寻找要包含的文件,找不到再到系统默认路径下寻找
#include <文件名> //默认到系统指定路径下寻找头文件
作用:
将文件名代表的文件中的内容 ,替换到当前文件
条件编译: //也是文本替换 --- 符合条件的文本
//形式1
#ifdef 标识符
程序段1
#else
程序段2
#endif
//形式2
#ifdef 标识符
程序段1
#endif
#ifndef 标识符
程序段1
#else
程序段2
#endif
#include
#define N
int main(int argc, const char *argv[])
{
#ifndef N
printf("hello");
#else
printf("world");
#endif
return 0;
}
#if 表达式
程序段1
#else
程序段2
#endif
多文件编程
main.c
|--add.c //自己的点c通常会包含自己的点h
|--add.h //一部分是 对外的函数声明 一部分时自己的点c需要用到的头文件等内容
|--sub.c
|--sub.h
main.c
#include
#include"add.h"
#include"add.h"
int main(int argc, const char *argv[])
{
int a,b;
printf("Input two num:");
scanf("%d%d",&a,&b);
printf("add = %d\n",add(a,b));
return 0;
}
add.c
int add(int a,int b)
{
return a+b;
}
add.h
#ifndef _ADD_H_
#define _ADD_H_
struct stu
{
int sno;
char name[20];
};
extern int add(int a,int b);
#endif
例题 定义一个字符串 "12345"
要求:
将"12345" 转化数值 12345 输出
写成函数