gpt4 book ai didi

c - 有什么方法可以将 _Static_assert 插入 ISO C11 中的表达式中吗?

转载 作者:太空狗 更新时间:2023-10-29 15:25:29 31 4
gpt4 key购买 nike

在C11中这样写是合法的,例如:

int b = (some_function_returning_void(), 1020);

你会得到 1020。但它不会让你写:

int b = (_Static_assert(2 > 1, "all is lost"), 304);

gcc 返回

error: expected expression before '_Static_assert'

并且有时在表达式外部使用 _Static_assert 会很不方便,因为您不走运基于预处理器宏的伪函数来验证它们的参数。

最佳答案

这在 ISO C11 中是可行的。诀窍是将 _Static_assert 放在结构声明中,放在 sizeof 表达式中:

sizeof(struct { _Static_assert(0, "yay it failed"); int dummy; })

根据 clang -std=c11 -Weverythingempty struct is a GNU extension 需要虚拟字段。

关于c - 有什么方法可以将 _Static_assert 插入 ISO C11 中的表达式中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51388341/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com