一元强制类型转换说明符:static_cast<type>变量。
五个作用域范围:函数范围、文件范围、块范围、函数原型范围、类范围。
递归与迭代:迭代显式使用重复结构;递归通过重复函数调用实现重复。
典型情况下,除了最小函数以外,编译器可以忽略用于其它函数的inline限定符。也就是说,不是加了inline关键字,内联效果就一定有用。尽量将函数放在头文件或调用语句之前。
使用指针传递可修改的参数给函数,不可修改的小参数按值调用传递,不可修改的大参数用常量引用传递给函数。
当函数调用中省略默认参数时,默认参数值自动传递给被调用的函数。默认参数必须是函数参数列表最右边的参数。默认值只能在函数原型中定义。在函数调用时,如果没有给定参数,则编译器将会传递默认的参数。
可以在同名局部变量的作用域中访问全局变量。
编译器通过检查调用中的参数个数、类型和顺序来选择相应的函数。无法通过返回值来检查,如返回整型的值时,该值可能被赋给浮点数,这时浮点数类型与整型就不一致了。
重载通过签名来区别,签名即函数名和参数类型的组合,以实现类型安全链接[U1] 。
用于解决不同数据类型下的相同类似操作时需重复编码问题。使用函数模板,可针对特定的数据类型,生成相应的函数代码。如下,相应的数据类型为T,Y。
Template <class T, class Y>
T max (T x, Y y)
{
函数定义
}
使用方法:z = max(x,y) // 根据调用全自动生成相应的函数代码及调用代码
指针非常灵活,但是可能由于指针的值指向了非法地址,程序运行时可能会导致程序跑飞、系统死机等问题。这些情况在单片机程序中非常常见,而在PC机上,由于处理器、操作系统有此类的异常处理机制,所以多数仅仅是以程序退出为结果。
将指针传递给函数有4种方法:
由于计算机类型的限制,使用浮点数进行运算时,需要使用相应的库进行转换,而使用整型则无此限制。因为在针对MCU编程中,尽量使用整型运算,可减少ROM占用量。
整形常量加u/U,表示unsigned int型。如无符号数12345u,按unsigned int方式存储;而-12345u,则先转换为补码53191,再按无符号数存储。如果整常量后加l/L,则认为是long型。
定义: int a[2][3];有:
指向数组元素的指针变量:int * p;
指向由M个元素组成的一维数组的指针变量:int (*p)[4]; []的优先级比*高,所以加上括号;否则将变成指针数组( int * p[4])。
指向函数的指针:int (*p)(形参列表);
返回指针值的函数:int * p(形参列表);
得到一个field在结构体(struct)中的偏移量
#define FPOS( type, field ) ( (dword) &(( type *) 0)->field )
得到一个结构体中field所占用的字节数
#define FSIZ( type, field ) sizeof( ((type *)0)->field )
文章评论(0条评论)
登录后参与讨论