1、c出错的可能位置:可以是编译时出错,可以是链接时出错,可以是运行时出错,不同的地方可能导致的错误原因差异很大
2、gcc -S 1.c 产生1.s,就是产生了汇编语言后停止编译
gcc -c 1.c 产生1.o,仅产生目标代码而跳过链接程序的步骤
-O是优化选项,后跟优化等级,值越大,优化等级越高,所需时间越长
一点疑问:目标代码的内容是机器语言指令,既然机器语言指令都是由0和1组成,为什么我们打开.o的目标文件时显示的却是乱码?
自己答:.o文件的内容应该是指令存储在文件里的一个存储形式,指令虽然由0和1组成,但表象在操作系统层面看到的就是乱码
但还是概念模糊
3、return 0是个好习惯
4、机器语言即计算机能识别的语言,由0和1组成。
汇编语言实质和机器语言相同,都是对硬件进行操作,只不过指令采用了英文缩写的标识符来容易记忆。
5、链接的过程是由链接程序来完成的:将目标文件和函数库中的目标代码组合起来,生成最终的可执行程序的这一过程被称为链接
6、一个习惯:常量名全大写字母;变量名要坚持自己的风格,比如全小写字母或者下划线分割或者驼峰表示法,首选下划线风格
7、正数以原码形式存放在内存中
负数以补码的形式存放在内存中
C中浮点常量都是以双精度型来存放和表示的
求补码的2种方式:(1)符号位不动,写出原码的反码,然后反码加一就是补码; (2)模减去原码就是补码
内存中的产生的补码如何还原成负数:补码的反码减去一,然后转换为10进制数,就得到了该负数
8、\0 空字符
9、定义符号常量:#define CONSTNAME literal
#define语句无分号结尾
10、被const修饰的变量初始化后值不被修改
11、变量名的长度限制取决于各编译器
12、字面常量值可修改,符号常量值全局不可修改。符号常量要规范定义,可以不用知道它的值就能理解它在代码的含义
13、不同的系统int存储的字节不同,有2字节的,有4字节的,2个字节--最小值-32768;4个字节的--最小值-2147483647
14、编译指令定义:#define MAXIMUM 100
关键字定义:const int MAXIMUM = 100
二者差别涉及到指针和变量作用域
15、赋值语句本身也是一个表达式
16、++x,y--:前缀模式,先执行递增或递减运算,再计算表达式的值;
后缀模式,先计算表达式的值,在执行递增或递减运算。
17、关键字sizeof实际上也是个运算符
18、c中的不等是!= , 不支持<>
19、if……else if……else……;尽量在条件中运用==使得逻辑表达更清楚,不要用!=,习惯问题
if(x)等价于if(x != 0)
20、&&的优先级高于||
21、0表示false,非0表示true,即使是负数也被认为是true
22、exp=exp1?exp2:exp3; 如果exp1值为真,则整个表达式的值为exp2的值,否则为expe3的值
23、逗号运算符:x = (a++,b++) => 2个表达式的值都会计算,先计算左边的,再计算右边的;整个表达式的结果是右边的子表达式的值
24、函数的功能越单一越好
25、内联函数通常很短,编译器将尽可能对其进行优化,提高其运行速度
inline int toInches(int Feet)
{
return (Feet/12);
}
26、三字符序列
Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
Replacement: [ ] { } # \ ^ | ~
cc -trigraphs -o test test.c
test.c内容:
#include
int main(void)
{
puts(" ??= ---> # ");
puts(" ??( ---> [ ");
# puts(" ??/ ---> \ ");
puts(" ??) ---> ] ");
puts(" ??' ---> ^ ");
puts(" ??< ---> { ");
puts(" ??! ---> | ");
puts(" ??> ---> } ");
puts(" ??- ---> ~ ");
return 0;
}
但??/始终测试都不对,不知道why
阅读(1525) | 评论(0) | 转发(0) |