1.true和false是bool类型
而TRUE和FALSE的定义是:(在AFX.H文件中)
#define
FALSE
0
#define
TRUE
1
2.大写的是从c开始就有的宏定义
小写的是c++引入的关键字
3.注意vc里大小写有别就行了
4.要说区别,那他们有一个最大的区别,bool是C语言,而BOOL不是C语言,编译器能认识指蔽bool而不认识BOOL,BOOL只是int的别称,说得更俗一点,bool是C保留字,而BOOL不是,你可以这样把BOOL定义成别的,当然在不与别的头文件冲突的情况下唯好州.
float
BOOL
当然,如果谁写出这样的程序会被骂死的!但它并没有语法错误.
5.true与TRUE的曲别:
两者虽然取值一样,但前者是占8位,后者占32位的。
MS搞个TRUE出来,可能是为了进行内存对齐吧。
自己感觉第五个比较专业,呵呵
1、增加restrict指针
C99中增加了公适用于指针的restrict类型修饰符,它是初始访问指针所指对象的惟一途径,因此只
有借助restrict指针表达式才能访问对象。restrict指针指针主要用做函数变元,或者指向由malloc()函
数所分配的内存变量卖誉悉。restrict数据类型不改变程序的语义。
如果某个函数定义了两个restrict指针变元,编译程序就虚圆假定它们指向两个不同的对象,memcpy()
函数就是restrict指针的一个典型应用示例。C89中memcpy()函数原型如下:
代码:
void *memcpy (void *s1, const void *s2, size_t size);如果s1和s2所指向的对象重叠,
其 *** 作就是未定义的。memcpy()函数只能用于不重叠的对象。C99中memcpy()函数原型如下:
代码:
void *memcpy(void *restrict s1, const void *restrict s2,size_t size);通过使用restrict
修饰s1和s2 变元,可确保它们在该原型中指向不同的对象。
2、inline(内联)关键字
内联函数除了保持结构化和函数式的定义方式外,还能使程序员写出高效率的代码。函数的每次调用与
返回都会消耗相当大的系统资源,尤其是当函数调用发生在重复次数很多的循环语句中时。一般情况下,当发
生一次函数调用时,变元需要进栈,各种寄存器内存需要保存。当函数返回时,寄存器的内容需要恢复。如果该
函数在代码内进中乎行联机扩展,当代码执行时,这些保存和恢复 *** 作旅游活动会再发生,而且函数调用的执
行速度也会大大加快。函数的联机扩展会产生较长的代码,所以只应该内联对应用程序性能有显著影响的
函数以及长度较短的函数。
3、新增数据类型
_Bool
值是0或1。C99中增加了用来定义bool、true以及false宏的头文件夹<stdbool.h>,以便程序
员能够编写同时兼容于C与C++的应用程序。在编写新的应用程序时,应该使用
<stdbool.h>头文件中的bool宏。
_Complex and _Imaginary
C99标准中定义的复数类型如下:float_Complexfloat_Imaginarydouble_Complex
double_Imaginarylong double_Complexlong double_Imaginary.
<complex.h>头文件中定义了complex和imaginary宏,并将它们扩展为_Complex和_Imaginary,
因此在编写新的应用程序时,应该使用<stdbool.h>头文件中的complex和imaginary宏。
long long int
C99标准中引进了long long int(-(2e63 - 1)至2e63 - 1)和unsigned long long int(0 - 2e64
- 1)。long long int能够支持的整数长度为64位。
NULL=0
FALSE=0
TRUE记得是-1,但运迅是如果用于if语句中,任何非0值都是true。但是TRUE一个宏,无法覆盖所有情况。
所以切记不要写出TRUE == (表达式)这样的判断,因为这样的判断往往都是错旁迹此误的
举例来说,州山
int bitmask = 0x0010000
if(~bitmask) //这是true的
if(TRUE == ~bitmask) //虽然你想要达到的目的和上面一样,但是实际这会是false。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)