C语言小细节归纳

ASSERT()是一个调试程序时经常使用的宏,用于捕获非法情况。定义在<assert.h>头文件中,计算括号内表达式的值,值为false(0),报告错误,终止运行。ASSERT()只在Debug版本中有,编译的Release版本则被忽略。ASSERT()是宏,assert()是ANSIC标准中规定的函数,类似ASSERT(),但是可以用在Release版本中。在包含#include<assert.h>前加上#define NDEBUG禁用assert()调用。

 

i++ = 5;不可赋值,++i = 5;可以赋值。i++表示取i地址,把值放入寄存器,然后对内存中的i加1。++i表示取i地址,对内容加1,放入寄存器。这里的寄存器里存的应该就是计算时取的值,所以计算时哪怕a = 1+(i++);这样加了括号,和a = 1+i++;也没有区别,最后的a都是用i在寄存器中的值计算后赋的值。

 

使用伪指令#pragma pack(n),C编译器将按照n个字节对齐。#pragma pack(n)取消自定义字节对齐方式。_attribute((aligned(n)))让所作用的结构成员对齐在n字节自然边界上。结构中成员大于n,则按照最大成员长度来对齐。_attribute_((packed))取消结构在编译过程中的优化对齐,按照实际占用字节数对齐。

当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。

void fun(char a[100])

{

//sizeof(a)=4;

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值