C语言程序的编译

编译流程

c——>翻译环境(编译(编译器),链接(连接器))——>运行环境——>exe

编译包括:一、预编译(删除注释,替换define)

                  二、编译(把c代码编译成汇编语言)

                  三、汇编
Linux    gcc-E  test.c

链接包括:一、合并段表

                  二、符号表的合并和符号表的重定位

预编译详解

预定义符号

原先定义好的:__FILE__         文件元文件名称

                        __LINE__        行

                        __DATE__        日期

                        __TIME__         时间

#define        预处理指令
#  开头的都叫预处理命令
例:#define   MAX   100
        #define   STR    "haha"
        #define  reg    register        把关键字reginter义为reg
        #define   do_forever    for(;;)
#define   定义宏
#define    机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或宏定义(define  macro)
声明方式:#define    name(parement-list)   stuff其中的parement-list是一个由逗号隔开的符号表它可能出现在stuff中。例:

#define  SQUARE(X)   X*X
int main()
{
	int ret = SQUARE(5);
	return 0;
}

#和##

使用#:把一个宏定义参数变成对应的字符串
##可以把位于它两边的符号合成一个符号,它允许宏定义从分离的文本片段创建标识符
#define   CAT(X,Y)    X##Y//把##两边X,Y合成一个符号

带副作用的宏参数

切记:宏的参数是替换进去再在宏中使用

宏和函数对比

宏不能调试
宏可以传类型,函数不行

命名约定

宏名全部大写,函数名不大写
#undef   移除一个宏定义
用法#undef  NAME

命名行定义

#include<stdio.h>
#define DEBUG

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,0 };
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		arr[i] = 0;
#ifdef DEBUG//如果前边不定义DEBUG则不执行
		printf("%d", arr[i]);
#endif
	}
	return 0;
}

条件编译指令

1.#if 常量表达式//常量表达式为真则执行
//.....
#endif
//常量表达式由预处理器求值
2.多分支的条件编译
#if   常量表达式
//......
#elif    常量表达式
//......
#else
//......
#endif
3.判断是否被定义

#if   defined(symbol)//如果定义过symbol则执行

4.嵌套指令

文件包含

本地文件:#include  "filename.h"
库文件:#include   <filename.h>

防止同一头文件嵌套重复使用
第一种方法:

#ifndef    __TEST_H_
#define    __TEST_H_
int add(int x,int y)
#endif

第二种方法:

#pragma   once

**********************************************************

致敬:比特鹏哥

**********************************************************

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值