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 语句的主体以了解如果不是,该怎么做。它看到一个失败的静态断言,因此生成编译错误。