1.程序编译链接有什么作用?
c源码经过编译变成对象文件,再进行链接变成可执行文件。
-
编译阶段:主要在做语法检查,生成对象文件(定义)。
-
链接阶段:将不同对象文件中的定义以及外部的索引等连接在一起。
-
从源代码生成可执行文件可分为四个步骤:
-
预处理(Prepocessing)
-
编译(Compilation)
-
汇编(Assembly)
-
链接(Linking)
下图为gcc生成输出文件的过程:
-
2.预处理#
#define PRINT(n) printf( "connect" #n " = %d", var##n )
int var = 1;
PRINT(9);
/*
以上执行后的结果为:connect9=19
分析:#将数字9字符串化为'9',##将var和n两个符号连接在一起
*/
-
运算符#(预处理运算符)==字符串化(stringizing);
-
运算符##可以把两个记号组合成一个记号。
3.C语言使用的编码
在c语言中,字符在存储时会根据所用编码转为对应的码值。字符分为窄字符char和宽字符wchar_t。wchar_t 类型的宽字符和宽字符串使用 UTF-16 或者 UTF-32 编码。对于窄字符串,C语言并没有规定使用哪一种特定的编码,只要选用的编码能够适应当前的环境即可,所以,窄字符串的编码与操作系统和编译器有关,经常使用的如GBK、UTF-8 都兼容 ASCII(纯ASCII基本不用了)。
4.逗号表达式
逗号","也是一种运算符,其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。一般形式为:表达式1,表达式2.且求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。
例如:
int x = 2 , y = 3 ;
printf("%d",(x,y));
/*
输出的结果为3
*/