程序环境和预处理

一、程序的编译环境和执行环境
(1)、每一个程序的源文件都会通过编译过程转换为相应的目标代码。
(2)、每一个目标代码由链接器捆绑在一起,形成一个单一的可执行程序。
(3)、链接器同时也会引入标准库函数中被程序任意引用的库函数,而且还可以搜索程序员的个人程序库,将需要的函数也链接到程序之中。

编译分为几个阶段组成:

程序执行的过程:
(1)、程序必须载入到内存中。
(2)、函数的执行开始,接着就调用main()函数
(3)、开始执行程序代码。这时函数需要使用一个运行时堆栈,存储函数的局部变量和返回地址。程序同时也可以使用静态内存,存储在静态内存中的变量在程序执行的整个过程中就一直保留它们的值。
(4)、终止程序,可能正常终止main()函数,也可能异常终止。

二、预处理器详解

以上这些符号都是语言内置的,可以直接使用。
1、#define 定义标识符
eg:

define PPROV 100

define rigister rig//创建一个更短的名字

在define定义标识符的时候不要加上;很容易会导致错误。
2、#define 定义宏

define name(parament-list) stuff

parament-list使用,隔开的符号表,参数列表的左括号必须要与name紧挨,否则参数列表就会被解释为stuff中的一部分。
eg #define add(x) x+x
注意:在用于数值表达式求值的宏定义一定要加上括号,为了避免在使用宏时由于参数中的操作符和邻近操作符之间不可预料的相互作用。

define 替换

(1)、调用宏时,首先对参数进行检查,看看是否包含任何由#define定义的符号,如果有,应该首先替换。
(2)、替换文本后被插入带文本原来的位置,对于宏,函数名被他们替换。
(3)、最后,再次对结果文件进行扫描,看它是否包含由#define定义的符号。

3、#与##
使用#,可以将一个宏参数变成对应的字符串

#define PRINT(format,value)\
     printf("the value of "#value" is "format"\n");
int i = 10;
int main()
{
     PRINT("%d", i +3);
     system("pause");
     return 0;
}
#define CAT(x,y) x##y
int main()
{
     int v9 = 10;
     printf("%d\n", CAT(v, 9));
     system("pause");
     return 0;
}


4、宏和函数
宏和函数的优缺点:

5、条件编译
具体实现为:

#include <stdio.h>
#include <stdlib.h>
#define _DEGUG_ 0
int main()
{
     int i = 0;
     int arr[10] = { 0 };
     for (i = 0; i < 10; i++)
     {
          arr[i] = i;
        #ifdef _DEGUG_
          printf("hehe\n");
        #endif
     }
     system("pause");
     return 0;
}

表示如果被定义了就执行其中的语句,如果没有定义就不执行

define DEGUG

ifdef DEGUG

printf(“hehe\n”);
#endif
如果条件为真则参加编译,如果条件为假就不参与编译

define DEBUG 1

if DEBUG

printf("hehe");

endif

避免头文件的重复使用

ifdef TEST_H

define TEST_H

//头文件的内容

endif TEST_H

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值