版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
title: 随笔 - C 语言中的编译期检测版assert "-!!(e)" categories:
在 https://stackoverflow.com/questions/9229601/what-is-in-c-code 看到个有趣的东西
<!-- more -->众所周知, assert()
会在程序运行到相关代码时检验返回值的值, 如果为0
则终止程序运行并输出指定错误信息
实际上, 我们可以通过如下手段实现在编译期进行检验
{% icodeweb blog lang:c draft-004/_static_assert.c %}
我们把它拆开来看
!!(exp)
: 如果exp == 0
, 则该部分为0
, 否则为1
-!!(exp)
: 取反, 如果exp == 0
, 则该部分为0
, 否则为-1
int: -!!(exp);
: 如果exp == 0
, 则该部分为int: 0;
, 否则为int: -1;
到这里就已经很清楚了, 占-1
个位的变量自然是无法声明的, 而占0
个位的变量可以声明, 且不会对程序造成任何影响
如果看不懂可以自行搜索位域(bitfield)