您的位置:首页 > 其它

宏、条件编译、编译多文件程序

2016-01-15 16:57 190 查看
宏:

#define 预处理指令用来定义宏

#include <stdio.h>

#define PI 3.14f

int main()

{

int radius =10;

printf("请输入半径:");

scanf("%d",&radius);

printf("周长=%f\n",2*PI*radius);

return 0;

}

在编译命令里使用-D选项指定宏所代表的内容

#include <stdio.h>

int main()

{

int radius = 13;

printf("请输入半径:");

scanf("%d",&radius);

printf("周长=%f\n",2*PI*radius);

return 0;

}

gcc -DPI=3.14f m.c

宏不可以使用自己的存储区实现和函数之间的数据传递,宏没有形式参数和返回值

因为宏没有返回值,所有能当作数字使用的宏,必须写在一对小括号里面,才能保证优先计算内部的操作符

不能把自增或自减的计算 结果作为宏的参数使用

#define SUB(x,y) ((x-y))

#是一个宏操作符,它可以把宏的一个参数转换成字符串字面值

#include <stdio.h>

#define STR(n) #n

int main() {

STR(2+3);

return 0;

}

##也是一个宏操作符,它可以把一个代表标识符的参数和其它内容连接形成一个新的操作符

#include <stdio.h>

#define STR(n) #n

#define LOCAL(n) l_##n

int main() {

int num=0;

int LOCAL(num)=0;//int l_num = 0;

STR(2+3);//"2+3"

return 0;

}

条件编译:

#ifdef........#else......#endif

#include <stdio.h>

int main()

{

int order = 0;

printf("请输入一个数字:");

scanf("%d", &order);

#ifdef ZHAOBENSHAN

if(order ==1)

printf("没有\n");

else

printf("真没有\n");

#else

if(order==1)

printf("有\n");

else

printf("没有\n");

#endif

return 0;

}

gcc -DZHAOBENSHAN m.c

多文件编程基本步骤:

1. 把所有函数分散在不同的源文件里(通常主函数单独占一个字节)

2. 为每个源文件编写配对的以.h作为扩展名的头文件

3. 在每个源文件里使用#include预处理命令,包含必要的头文件

例子1:

main.c add.h add.c

vi main.c

#include <stdio.h>

#include "add.h"

int main()

{

int num=add(2,7);

printf("num=%d\n",num);

return 0;

}

vi add.h

int add(int,int);

vi add.c

#include "add.h"

int add(int num,int num1)

{

return num+num1;

}

例子2:

vi main.c

#include <stdio.h>

#include "read.h"

int main()

{

int num=fun();

printf("num=%d\n",num);

}

vi read.h

#ifndef _FUN_H_

#define _FUN_H_

int fun(void);

#endif

vi read.c

#include <stdio.h>

#include "read.h"

int fun(void)

{

int num=0;

printf("请输入一个数字:");

scanf("%d",&num);

return num;

}

gcc main.c read.c

Makefile实现文件程序的编译

Makefile文件中记录整个编译过程,make工具按照Makefile中记录的过程完成编译

Makefile文件中每个编译命令前都应该写tab键而不是空格

头文件中的内容应该包含在条件编译的预处理指令中,这样可以避免重复编译

文件中使用的宏名称应该根据文件名变化得到

如果一个源文件里希望使用另外一个源文件中声明的全局变量,就需要使用 extern关键字,再次把这个变量声明一次

vi main.c

#include <stdio.h>

#include "read.h"

int main()

{

read();

printf("num=%d\n",num);

return 0;

}

vi read.h

#ifndef _READ_H_

#define _READ_H_

extern int num;

void read(void);

#endif

vi read.c

#include <stdio.h>

#include "read.h"

int read(void)

{

printf("请输入一个数字:");

scanf("%d",&num); //想要用num,必须使用extern

}

使用extern关键字声明变量的语句,不会分配内存,所以可写在头文件中

静态全局变量,不可以被其它文件中的语句使用.

静态全局变量的作用域就是这个文件,不能跨函数实现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: