extern,inline,宏,sizeof

Extern

1.extern int a;表示引用其它模块的全局变量a,此处只是声明 。

作用是告诉编译器该变量在其它地方已经有定义,如果实际没有,会在链接时报错。

一般在全局变量对应的头文件中声明,让其它模块包含

 

2.也可声明函数,但加不加效果一样。

 

3.声明数组可以不指定大小,但不可以声明为指针(因为数组是常指针?)

 

4.extern "C" 声明C函数 extern "C" int f(int a); 因为C++编译后函数名带参数类型,来支持重载,不加”C”,调用会被编译成_f_int,加了后编译成_f

或包含C头文件   extern "C"{

#include...

}//注意编译预处理指令必须单独一行

 

Inline

1.inline要与函数定义在一起,声明inline不起作用

 

2.inline函数一般写在头文件中,这样才能被其它模块调用,否则编译时找不到inline

 

3.类声明中的函数自动成为inline,所以写在声明里的set get不会影响效率,这样等于直接访问私有变量

 

1. 使用宏时要注意加括号例如 M(a,b) a*b  有可能a是一个加表达式

 

2.   求结构体成员偏移 FIND(s,a) (size_t)&(((s*)0)->a)

 

3.   #将参数转为字符串  ##连接多个参数名    ...变参

例如 x##y  会变成访问xy变量

 

4.宏多行定义加/

    #define SUM(i,max,s) /

       s = 0; /

       for(i=1; i<max; i++) /

           s += i;

    #define MACRO(arg1, arg2) do { /

       /* declarations */ /

           stmt1; /

           stmt2; /

       } while(0) /* (no trailing ; ) */这么写目的是防止多一个; 如if语句块  if(0)

       ;;

    Else// 多了个分号,else没有匹配

 

5.undef取消某个宏定义

 

Sizeof

1. sizeof是操作符  对类型要加括号,对变量可以不加括号  一般在编译时计算  

 

2.计算结构体大小

    结构体所有成员的偏移必须是该成员大小的整数倍

    结构体大小是任意成员大小(即最大)的整数倍(不一定要求4字节对齐,例如3个char长度就是3)

    struct s

    {

       double d;

       char c;

    };      其大小为16

    有子结构体时不考虑子结构体大小,子结构体首地址要是子结构体最大成员的整数倍

 

3.可以用pack预处理指令禁止对齐 (写入文件或者网络传输时用)

 

4. 类  

sizeof 一个类时等于数据成员大小 

static在全局数据区,不计入

如果有虚函数  则多一个虚函数指针  要注意虚函数指针的地址也要整除4

 

5.括号中的内容不被编译 用类型替代 sizeof(f())不会调用f() 而是用返回值的类型替代

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值