运行环境
程序执行的过程:
? ? . 程序必须载入内存中。在有操作系统的环境中:一般这个由操作系统完 成。在独立的环境中,程序的载入必须 由手工安排,也可能是通过可执行代码置入只读内存来完成。
? ? . 程序的执行便开始。接着便调用main函数。
? ? . 开始执行程序代码。这个时候程序将使用一个运行时堆栈(stack), 存储函数的局部变量和返回地址。程序同 时也可以使用静态(static)内 存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。
? ? . 终止程序。正常终止main函数;也有可能是意外终止。
二、预处理详解
预定义符号
__FILE__ ? ? ?//进行编译的源文件
__LINE__ ? ? //文件当前的行号
__DATE__ ? ?//文件被编译的日期
__TIME__ ? ?//文件被编译的时间
__STDC__ ? ?//如果编译器遵循ANSI C,其值为1,否则未定义
这些预定义符号都是语言内置的;
举个栗子:
#include<stdio.h>
int main()
{
? ? printf("file:%s line:%d\n", __FILE__, __LINE__);
? ? return 0;
}
#define
#define 定义标识符
语法:
#define name stuff
stuff这里可以是一段表达式,也可以是数字或字母;
可以用一段代码举例:
#include<stdio.h>
#define CASE break;case
int main() {
? ? int x = 0;
? ? switch (x) {
? ? case 1:
? ? ? ? break;
? ? CASE 2:
? ? CASE 3 :
? ? CASE 4:
? ? }
? ? return;
}
有一个在萌新时期都会有的一个困惑:
在define定义标识符的时候,要不要在最后加上 ; ?
例如:
#define MAX 1000;
#define MAX 1000
其实这里面大有讲究,可以看一下下面这段代码:
#include<stdio.h>
#define MAX 1000;
int main() {
? ? int max = 0;
? ? max = 1000;
? ? if (max == MAX) {
? ? ? ? printf("1");
? ? }
? ? else {
? ? ? ? printf("2");
? ? }
? ? return 0;
}
下面是宏的申明方式:
? ? #define name( parament-list ) stuff 其中的 parament-list 是一个由逗号隔开的符号表,它们可能出现在 stuff中。
? ? 注意: 参数列表的左括号必须与name紧邻。
? ? 如果两者之间有任何空白存在,参数列表就会被解释为stuff的一部分。
?