在ANSI C的任何一种实现中,存在两种不同的环境,翻译环境和执行环境。这两种环境不必位于同一台机器上,例如交叉编译器就实在一台机器上运行,但它所产生的可执行代码位于不同类型的机器上。
另外标准还定义 了独立环境,就是不存在操作系统的环境,嵌入式系统就属于这种独立环境。
翻译的过程:
两部分组成:编译和链接
编译:预处理器处理------->解析(判断语句的意思,这个是产生绝大多数错误和警告信息的地方)---------->产生目标代码----->优化器优化(可选项,优化需要时间,一般在调试完毕前是不会选择优化的
链接:一个程序的编译产生的各个目标文件由链接器捆绑在一起,形成一个单一而完整的可执行程序。链接器同时会引入标准C库或者程序员个人写的库(在手动配置好引入的时候 如:-lunp)。
文件名约定:
目标文件在UNIX中扩展名为.o 在MS-DOS系统中,扩展名为.obj
词法规则
字符:标准还定义了几个三字母词,三字母词就是3个字母合起来表示另一个字符,这些三字母词的特征是前两个都是??。所以在两个连续?出现的地方要注意,如果只是想表示两个?。要记得在第一个?前加转义符。
有些字符前面加了转义符还可以表示一些特殊的含义:
\a \n \ddd(八进制数字) \xddd(十六进制数字)
转义符表示的八进制和十六进制数字都是有大小限制的,如上所示,最多三位。
标识符:大小写字母,数字和下划线组成,但不能以数字开头,大小敏感。虽说对长度没有限制,但标准允许编译器忽略第31个字符以后的字符。标准同时允许编译器对用于表示外部名字的标识符(诸如lunp)进行限制,只识别前6为不区分大小写的字符。