NCRE之C语言基础问答(一)

 

从今天开始,小编要带着大家进行系统的学习NCRE的C语言部分哦,跟我走,二三四级工程师那都不是事儿~(一)声...



从今天开始,小编要带着大家进行系统的学习NCRE的C语言部分哦,跟我走,二三四级工程师那都不是事儿~





(一)声明和初始化

1.1 我如何决定使用那种整数类型?如果需要大数值 (大于 32, 767 或小于 −32, 767), 使用 long 型。否则, 如果空间很重要 (如有大数组或很多结构), 使用 short 型。除此之外, 就使用 int 型。如果严格定义的溢出特征很重要而负值无关紧要, 或者你希望在操作二进制位和字节时避免符号扩展的问题, 请使用对应的无符号类型。但是, 要注意在表达式中混用有符号和无符号值的情况。
尽管字符类型 (尤其是无符号字符型) 可以当成 “小” 整型使用, 但由于不可预知的符号扩展和代码增大有时这样做可能得不偿失。使用无符号字符型有所帮助。
在选择浮点型和双精度浮点型时也有类似的权衡。但如果一个变量的指针必须为特定的类型时, 以上规则不再适用。
如果因为某种原因你需要声明一个有严格大小的变量, 确保象 C99 的那样用某种适当的 typedef 封装这种选择。通常, 这样做唯一的好原因是试图符合某种外部强加的存储方案。1.2 64 位机上的 64 位类型是什么样的?C99 标准定义了 long long 类型, 其长度可以保证至少 64 位, 这种类型在某些编译器上实现已经颇有时日了。其它的编译器则实现了类似 longlong 的扩展。
另一方面, 也可以实现 16 位的短整型、32 位的整型和 64 位的长整型, 有些编译器正是这样做的。1.3 怎样定义和声明全局变量和函数最好?首先, 尽管一个全局变量或函数可以 (在多个编译单元中) 有多处 “声明”, 但是 “定义” 却只能允许出现一次。定义是分配空间并赋初值 (如果有) 的声明。最好的安排是在某个相关的 .c 文件中定义, 然后在头文件 (.h) 中进行外部声明, 在需
要使用的时候, 只要包含对应的头文件即可。定义变量的 .c 文件也应该包含该头文件, 以便编译器检查定义和声明的一致性。
这条规则提供了高度的可移植性: 它和 ANSI C 标准一致, 同时也兼容大多数 ANSI 前的编译器和连接器。Unix 编译器和连接器通常使用 “通用模式” 允许多重定义, 只要保证最多对一处进行初始化就可以了; ANSI C 标准称这种行为为“公共扩展”, 没有语带双关的意思。
可以使用预处理技巧来使类似

DEFINE(int, i);的语句在一个头文件中只出现一次, 然后根据某个宏的设定在需要的时候转化成定义或声明。但不清楚这样的麻烦是否值得。
如果希望让编译器检查声明的一致性, 一定要把全局声明放到头文件中。特别是, 永远不要把外部函数的原型放到 .c 文件中: 通常它与定义的一致性不能得到检查, 而矛盾的原型比不用还糟糕。


    关注 考证Go


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册