栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C语言】程序的编译与链接介绍和预处理详解

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C语言】程序的编译与链接介绍和预处理详解

目录

 一、程序的编译和链接

二、预处理

1.预定义符号

 2.#define定义宏

 3.把一个宏参数变成对应的字符串(#参数)

4.#undef

5.条件编译

 一、程序的编译和链接

组成一个程序的每个源文件通过编译过程分别转换成目标代码(object code)。

每个目标文件由链接器(linker)捆绑在一起,形成一个单一而完整的可执行程序。

链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人 的程序库,将其需要的函数也链接到程序中。

以上便是编译和链接的主要过程

下面为编译和链接的详细过程:

二、预处理

1.预定义符号

__FILE__      //进行编译的源文件

__LINE__     //文件当前的行号

__DATE__    //文件被编译的日期

__TIME__    //文件被编译的时间    ..............等等

代码示例:

int main()
{
	int i = 0;
	printf("文件:%s  i=%dn",__FILE__, i);//打印进行编译的源文件
	printf("行号:%d  i=%dn", __LINE__, i);//打印当前代码的行号
	printf("日期:%s  i=%dn", __DATE__, i);//打印文件被编译的日期
	printf("时间:%s  i=%dn", __TIME__, i);//打印文件被编译的时间
	return 0;
}

 

 2.#define定义宏

#define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义 宏(define macro)。

下面是宏的申明方式:

#define name(parament-list) stuff

其中name 是宏名, parament-list 是一个由逗号隔开的符号表,它们可能出现在stuff中

注意:parament-list的左括号必须与name紧邻。

代码示例:

#define SQR(x) ((x)*(x))
int main()
{
	int a = 4;
	printf("%dn", SQR(a));
	return 0;
}

输出结果为:

 3.把一个宏参数变成对应的字符串(#参数)

当我们要实现 打印一个数等于多少时

int main()
{
	int a = 10;
	int b = 20;
	printf("a = %dn", a);
	printf("b = %dn", b);
	return 0;
}

我们可以写一个宏来更简单的实现:

#define PRINT(N) printf(#N" = %dn",N)
int main()
{
	int a = 10;
	int b = 20;
	//printf("a = %dn", a);
	//printf("b = %dn", b);
	PRINT(a);
	PRINT(b);
	return 0;
}

如果直接写成

#define PRINT(N) printf("N = %dn",N)

那么N将直接替换成参数的具体值,例如 PRINT(a),a等于10,那么宏将替换为

printf("10 = %dn",10),所以#N的作用为  将N直接替换为所传参数对应的字符串

例如 PRINT(a),相当于 printf("a"" = %dn",10)

4.#undef

这条指令用于移除一个宏定义。

使用示例:

 移除之后,M显示报错

5.条件编译

常见的条件编译指令:

1.

#if 常量表达式
 //...
#endif

 2.多个分支的条件编译

#if 常量表达式
 //...
#elif 常量表达式
 //...
#else
 //...
#endif

 3.判断是否被定义

#if defined(symbol)
#ifdef symbol
#if !defined(symbol)
#ifndef symbol
#define M
int main()
{
#if defined(M)
	printf("yesn");
#endif
	//
#ifdef M
	printf("yesn");
#endif
	//
#if !defined(M)
	printf("yesn");
#endif

#ifndef M
	printf("yesn");
#endif
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1026135.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号