宏定义
<1>宏常量:
#define SIZE 20
#include <stdio.h>
#define PI 3.14
int main(){
float r =0;
printf("input r:");
scanf("%f",&r);
float area = PI*r*r;
printf("area = %.2f\n",area);
return 0;
}
<2>宏使用时,采取的是原样替换。
<3>宏函数
#define
宏函数名
(
参数
1
,参数
2)
表达式
#include <stdio.h>
void print_demo1()
{
printf("demo first\n");
}
void print_demo2()
{
printf("demo second\n");
}
void print_demo3()
{
printf("demo second\n");
}
#define TEST() print_demo1();print_demo2();
int main()
{
TEST(); //单独使用无任何副作用;
return 0;
}
1)给 if...else...语句块添加大括号。
2)宏使用 do...while(0)语句防止编译出错。
<4>字符串化运算符#
如果在宏调用时,需要把参数转换为字符串去处理,需要在参数前添加
#
<5>不定义参数宏
C99
标准中规定,允许用户定义有省略号的宏。省略号必须放在参数列表的后面,表示可选参数。你可以
用可选参数来调用这类宏。在代码中用
...
代表。他们被保存到
__VA_ARGS__
中
__VA_ARGS__ :
用于在宏替换部分中,表示可变参数列表;
条件编译
一、命令行参数
#include <stdio.h>
int main(int argc,const char* args[])
{
printf("argc=%d\n",argc);
printf("args[0]=%s\n",args[0]);
printf("args[1]=%s\n",args[1]);
return 0;
}
其中
argc
是命令行中参数的个数
args
分别代表命令行中的参数
二、新代码注释
格式1:
#if 宏名
代码块
#endif
宏名为真,则编译代码块
格式2:
#if 宏名
代码块1
#else
代码块2
#endif
如果宏名为真,则编译代码块1,否则编译代码块2
三、宏是否定义的判断
格式1:
//ifndef =====> if no define
#ifndef 宏名
代码块
#endif
功能:若宏没有定义,则执行代码块
格式2:
#ifndef 宏名
代码块1
#else
代码块2
#endif
功能:若宏没有定义,则执行代码块1,否则执行代码块2
注意:条件编译在多文件编程中经常会用到
多文件编程
一、extern关键字
/
ˈ
ekst
ɜː
n/
外面的,外部的
功能:声明变量或函数是来源于其它文件的全局变量或全局函数
使用方法 :
extern
数据类型 全局变量名
;
extern
返回值类型 函数名
(
数据类型 参数
1,
数据类型 参数
2......)
编译(同时编译多个文件)
使用
extern
关键字声明变量或函数是来源于外部文件的全局变量或全局函数
二、多文件编程框架
1.头文件 xxx.h
头文件.h
<1>防止其他头文件重复定义的宏
<2>其他需要使用的头文件
<3>函数的声明
<4>宏定义
<5>结构体或枚举类型的声明
<6>全局变量的声明
2.
功能文件
: xxx.c
主要存放用户编写的逻辑代码函数,不包括
main
函数
3.
组合逻辑的文件 :
main.c
用于组合功能文件提供的函数接口