C/C++

在所有的编程语言中,只有C语言和非C语言,C是“贴地”飞行的艺术!

C is described as high-level and portable assembly language, and one of the first applications cross-compiled for any new CPU architecture will be a C compiler!

也许把Object文件翻译成目标文件是个错误,它并不是最后的目标,只是一个中间的对象。翻译成对象似乎更好,链接就是将所有对象linking在一起,形成最后的目标。一个objcet,也是一个module的概念。

tang_yuan.png

C语言知识点总结

++ii++i+=N的汇编一样,是否比i=i+1i=i+N快,看编译器了,gcc编译后用objdump -d看,都一样(x86_64)!从语义上看,单独使用时++i更优,比如for循环,写成这样也不用加括号:++*ip(对*ip+1,而*ip++,是对ip指针+1,因为++--*的优先级相同,它们按表达式从右到左结合)。

EOF = -1(d), 4294967295(u), 0xFFFFFFFF,EOF是int,不是char!

floatdouble浮点型数据,也可以做++--,但不推荐!(浮点数

判断空指针,使用NULL0或者if(!p),都OK,基本上这只是代码风格问题!NULL不为0的情况存在,但现在越来越罕见,而且编译器在指针比较的上下文,隐藏了一些细节!

用哪个macro来判断host的byte order?(判断字节序

prefix:0x16进制,08进制数,0b2进制数。

suffix:Uunsigned,Llong,ULunsigned long,LLlong long,ULLunsigned long long,Ffloat。(大小写都OK)

使用assignment operator op=,也许可以帮助编译器生成更高效的代码,而且code is more compact!op可以是:+,-,*,/,%,<<,>>,&,^,|expr1 op= expr2等价于expr1 = (expr1) op (expr2)

Type conversion is always tricky and buggy! For ternary operator ?:: if f is a float and n is an int, then (n>0)?f:n is of type float regardless of whether n is positive.

signed int无限右移后是-1,无限左移后是0!移位补0,但signed number的右移是例外。(Python中负数右移一样,JavaScript也一样,JavaScript中有>>>强制补0的operator)

malloc后检查,free前检查,free后赋NULL,accordingly!

C语言选择了这种用\0符号作为字符串结束符的方式;strlen的结果没有包含最后的\0!

ASCII中有6个space character

Race conditions are a result of uncontrolled access to shared data. When the wrong access pattern happens, something unexpected results. (condition这里不能翻译成条件,例如:heart condition)

Critical sections: code that can be executed by only one thread at any given time atomically.

-- 目录[2] --

-- 文章[31] --