Cstatic_assert第一个参数
C static_assert first parameter
我写这段代码是为了测试static_assert
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <inttypes.h>
#define static_assert _Static_assert
typedef enum {ONE=1, TWO, THREE} num_t;
uint8_t Is_Num_Valid(num_t number){
uint8_t i = 0;
for(i=1;i<4;i++){
if(number == i){
return 1;
}
}
return 0;
}
int main()
{
num_t number;
number = ONE;
printf("%d\n", Is_Num_Valid(number));
if(Is_Num_Valid(number)){
static_assert(0, "Number entered is out of boundaries");
}
printf("Number is> %d\n", number);
return 0;
}
这总是导致编译错误
错误:静态断言失败:"Number entered is out of boundaries"
为什么这不起作用,如果条件为 0,它不应该执行 if() 的主体!!!
A static_assert
发生在编译时,但 if
语句中的决定发生在 运行 时。编译器无法知道 if
子句将为假,它需要查看 if
语句的主体以了解如果不是,该怎么做。它看到一个失败的静态断言,因此生成编译错误。
我写这段代码是为了测试static_assert
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <inttypes.h>
#define static_assert _Static_assert
typedef enum {ONE=1, TWO, THREE} num_t;
uint8_t Is_Num_Valid(num_t number){
uint8_t i = 0;
for(i=1;i<4;i++){
if(number == i){
return 1;
}
}
return 0;
}
int main()
{
num_t number;
number = ONE;
printf("%d\n", Is_Num_Valid(number));
if(Is_Num_Valid(number)){
static_assert(0, "Number entered is out of boundaries");
}
printf("Number is> %d\n", number);
return 0;
}
这总是导致编译错误 错误:静态断言失败:"Number entered is out of boundaries"
为什么这不起作用,如果条件为 0,它不应该执行 if() 的主体!!!
A static_assert
发生在编译时,但 if
语句中的决定发生在 运行 时。编译器无法知道 if
子句将为假,它需要查看 if
语句的主体以了解如果不是,该怎么做。它看到一个失败的静态断言,因此生成编译错误。