⚡Hello~这里是傾城49⚡
🐏不定期更新知识干货~🐏
🌈点个关注不迷路~🌈
文章目录
程序的翻译环境和执行环境
在ANSI C的任何一种实现中,存在两个不同的环境。
- 翻译环境,在这个环境中源代码被转换为可执行的机器指令(二进制指令)。
- 执行环境,它用于实际执行代码。
翻译环境
- 分为编译和链接
- 其中编译又分为预编译(预处理)、编译、汇编
- 链接功能:
- 合并段表
- 符号表的合并和重定位
预处理
预定义符号
__FILE__ 进行编译的源文件
__LINE__ 文件当前的行号
__DATE__ 文件被编译的日期
__TIME__ 文件被编译的时间
__STDC__ 如果编译器遵循ANSI C,其值为1,否则未定义
#define中#和##
#:把一个宏参数变成对应的字符串
#include <stdio.h>
#define PRINT(format,x) printf("the items "#x" number is "format"\n",x) //转换成对应的字符串
int main()
{
int a = 10;
PRINT("%d",a);
return 0;
}
//#x转换成对应的字符串为"a"
##:可以把位于它两边的符号合成一个符号。
它允许宏定义从分离的文本片段创建标识符。
#include <stdio.h>
#define CAT(x,y) x##y
int main()
{
int HW = 20;
printf("%d\n",CAT(H, W)); //20
return 0;
}
#undef
用于移除一个宏定义
#undef NAME
如果要重定义一个现存的名字,首先要移除旧的名字。
条件编译
常见的条件编译指令:
1.
#if 常量表达式
...
#endif
//常量表达式由预处理器求值
例如:
#define __LINE__ 1
#if __LINE__
...
#endif
2.多个分支的条件编译
#if 常量表达式
...
#elif 常量表达式
...
#else
...
#endif
3.判断是否被定义
#if defined(symbol)
#ifdef symbol
#if !defined(symbol)
#ifndef symbol
4.嵌套指令
#if defined(OS_UNIX)
#ifdef OPTION1
unix_version_option1();
#endif
#ifdef OPTION2
unix_version_option2();
#endif
#elif defined(OS_MSDOS)
#ifdef OPTION2
msdos_version_option2();
#endif
#endif
总结
以上就是本篇的内容啦