C,C++语言的基础技巧收集

把看到的,碰到的先记录在这里

1. 整形定义的时候使用L,小写的l容易和1混淆。无符号的要加UL。

   注释:对于一些应用比较重要,如定义下面一个宏,如果不加UL,就有可能发生溢出

           #define  SECOND_OF_YEAR   (365*24*60*60)UL

2. 关于int和long型长度的定义: C语言标准规定,int长度不小于16bit,long型不小于32位,具体的实现取决于编译器的实现和具体硬件的实现。

  注释:在嵌入式应用开发中,这个问题是一个陷阱,某些16位机就会将int规定为16bit而不是我们常见的32bit。甚至char型也是16bit。

3. 函数定义和声明:如果我们在调用一个函数的时候,没有采用extern来声明,对于函数的返回值,编译器会默认为int类型。很不幸的是如果你没有打开编译器对类型声明的严格检查,摔跤是难免的。

 注释:如在a.c文件中定义了一个函数double add(double a,double b),在b.c中没有使用extern double add(double a,double b);来声明函数就直接调用,那么add默认返回的值将是int类型而不是期望的double类型。

4. 字符串字面值的链接技巧:对于很长的字符串,书写和阅读都不方便,可以采用下面的技巧

   4.1 puts("第一行字符串"

                 "第二行字符串"

                 "第三行字符串");

     连接的结果:"第一行字符串第二行字符串第三行字符串"

      注释: 利用编译器字符串连接规则--两个相邻的仅由空格,制表符和换行符分开的字符串字面值,可以连接成一个新的字符串字面值。其间的空格,制表符和换行符会被忽略.

 4.2 puts("第一行字符串/

第二行字符串/

第三行字符串");

     注释: 这个方法不常用,利用程序的格式化特性--在一行的末尾加一个反斜线符号'/'可以将此行和下一行当作同一行处理。但是反斜线后面不能有任何字符,包括注释。而且下一个行的开始的空格也将被视为有效字符。

5. 有相同名称的局部变量和全局变量的时候,局部变量优先。

6. struct 和 class定义的区别:唯一的区别在于默认的访问级别,struct的成员默认是public,class的级别是private

7. pack的使用: 对于要在不同系统间进行通信的时候,而且通信传送的数据结构是struct类型,使用pack很有必要,以保证正确的填充.

发布了13 篇原创文章 · 获赞 7 · 访问量 5429

猜你喜欢

转载自blog.csdn.net/huangbinvip/article/details/5793928
今日推荐