任何c语言程序都需要经过两种不同的环境才能实现
第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。
第2种是执行环境,它用于实际执行代码
源文件经过编译器编译生成各自的目标文件,在经过链接器链接生成可执行程序。
已经生成可执行程序(.exe)
程序执行的过程:
- 程序必须载入内存中。在有操作系统的环境中:一般这个由操作系统完成。在独立的环境中,程序
的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。程序的执行便开始。接着便调用main函数。开始执行程序代码。这个时候程序将使用一个运行时堆栈(stack),存储函数的局部变量和返回
地址。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程
一直保留他们的值。终止程序。正常终止main函数;也有可能是意外终止。
1预定义符号
FILE //进行编译的源文件
LINE //文件当前的行号
DATE //文件被编译的日期
TIME //文件被编译的时间
STDC //如果编译器遵循ANSI C,其值为1,否则未定义
2#define定义的标识符 ----原样替换的规则
在程序中扩展#define定义符号和宏时,需要涉及几个步骤。
- 在调用宏时,首先对参数进行检查,看看是否包含任何由#define定义的符号。如果是,它们首先
被替换。替换文本随后被插入到程序中原来文本的位置。对于宏,参数名被他们的值替换。最后,再次对结果文件进行扫描,看看它是否包含任何由#define定义的符号。如果是,就重复上
述处理过程。
宏和函数的对比
命名约定
一般来讲函数的宏的使用语法很相似。所以语言本身没法帮我们区分二者。
那我们平时的一个习惯是:
把宏名全部大写
函数名不要全部大写
条件编译
int main()
{
#if 1 //为真参与编译,为假参与
printf("hehen");
return 0;
#endif
#if 0
printf("hahan");
#endif
return 0;
}
int main()
{
#ifndef M //未宏定义则打印
printf("hehen");
#endif
return 0;
}
头文件包含的区别 ” “和<>
查找策略的不同: ” “现在源文件所在目录(当前工程)中查找,找不到再去库目录中查找
<>指针库目录下查找
1#pragma once
2头文件中的 ifndef/define/endif



