定义于头文件 <assert.h> #define static_assert _Static_assert 此便利宏展开成关键词 _Static_assert。 示例 运行此代码 #include <assert.h> int main(void) { static_assert(2 + 2 == 4, "2+2 isn't 4"); // 良式 static_assert(sizeof(int) < sizeof(char), "this program requires...
四、_Static_assert(C11标准) assert()是在运行时进行检查的,如果一份工程很大,编译起来需要很长时间,一些情况在运行时检查,效率就比较低了。 这时候_Static_assert()就派上用场了,这是C11标准中的一个特性,_Static_assert()在编译时进行检查,如果编译时检测到代码里的一些异常情况,就会导致程序无法通过编译。下...
static_cast: 断言不通过编译出错,因为是编译器在编译器进行检查; assert: 断言不通过不会影响编译,程序运行时检查; staticconstinta=0;static_assert(a>1,"error1");// 无法通过编译static_assert(a>-1,"error2");// 可以通过编译assert(0);// 可以通过编译, 但无法继续运行assert(1);// 可以通过编译...
#define static_assert(expr) \do{ char tmp[(expr)?1:-1]; }while(0)如果条件表达式为真,则 static_assert() 宏会定义一个长度为 1 的数组,否则就会尝试定一个长度为 -1 的数组,此时必定无法编译通过。这里值得一提的一个小技巧是使用 {} 符号将定义的 tmp 数组的作用域限定在本次调用的 static_ass...
static_assert()是C++ 新增的内容 在C语言里可以这样实现: #define JOIN( X , Y ) JOIN_AGIN( X, Y ) #define JOIN_AGIN(X,Y) X##Y typedef static_assert(e)\ typedef char JOIN(assert_failed_at_line,__LINE___) [(e)?1:-1]
auto static register extern const volatile return continue break goto if else switch case default for do while C99新增关键字: _Bool _Complex _Imaginary inline restrict C11新增关键字: _Alignas _Alignof _Atomic _Generic _Noreturn _Static_assert _Thread_local C语言标准定义的32个关键字可以分为如下...
_Bool _Complex _Imaginary inline restrict C11新增关键字:_Alignas _Alignof _Atomic _Generic _Noreturn _Static_assert _Thread_local C语言标准定义的32个关键字可以分为如下四类:一、数据类型关键字 1. 基本数据类型(5个)void:声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果 char:字符...
#define static_assert(expr) \do{ char tmp[(expr)?1:-1]; }while(0)如果条件表达式为真,则 static_assert() 宏会定义一个长度为 1 的数组,否则就会尝试定一个长度为 -1 的数组,此时必定无法编译通过。这里值得一提的一个小技巧是使用 {} 符号将定义的 tmp 数组的作用域限定在本次调用的 static_ass...
static_assert() C11 引入了静态断言static_assert(),用于在编译阶段进行断言判断。 static_assert(constant-expression, string-literal); 1. static_assert()接受两个参数,第一个参数constant-expression是一个常量表达式,第二个参数string-literal是一个提示字符串。如果第一个参数的值为false,会产生一条编译错误,...
_Static_assert _Noreturn _Thread_local _Generic 词语解释 auto :声明自动变量 break:跳出当前循环 case:开关语句分支 char :声明字符型变量或函数返回值类型 const :声明只读变量 continue:结束当前循环,开始下一轮循环 default:开关语句中的“默认”分支 ...