- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想制作宏,检查文件是否“可包含”。像这样:
#define CHECK(__file) \
_Static_assert( __has_include(__file), "Error")
CHECK("header.h");
但它会产生如下错误
f.c:28:3: __has_include must be used within a preprocessing directive
f.c:28:3: Implicit declaration of function '__has_include' is invalid in C99
f.c:28:3: Static_assert expression is not an integral constant expression
这可能吗?或者可能有不同的解决方案会产生类似的结果?
感谢您的帮助!
最佳答案
如果一切都失败了(你很难反驳:“__has_include 必须在预处理指令中使用”),在它上面抛出另一层间接:
h_assert(){
for h; do
printf '
#if !__has_include("%s")
_Static_assert(0,"__has_include(\"%s\")");
#endif
' "$h" "$h"
done
}
h_assert foo.h bar.h baz.h #Generate the header assertions with a POSIX shell
关于c - _Static_assert 与 __has_include,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41855464/
最终,我想要一个编译时常量宏,它本身包含一个断言。 使用真正的_Static_assert,我可以做类似的事情 #define CEXPR_MACRO_WITH_ASSERTION(Assertion
我想制作宏,检查文件是否“可包含”。像这样: #define CHECK(__file) \ _Static_assert( __has_include(__file), "Error"
是否可以让编译器错误/警告诊断输出 C11 或 C17 中的编译时计算数值(即不使用模板)?下面的链接使用模板魔术在 C++ 中执行此操作。目的是将其用作 _Static_assert 替换,它打印不
我希望在a_static_assert中使用文字的数组文字,但我收到编译器错误,指出这不是常量表达式。有没有办法让它发挥作用?
在C11中这样写是合法的,例如: int b = (some_function_returning_void(), 1020); 你会得到 1020。但它不会让你写: int b = (_Static
假设我有以下定义: #include #include #define ASSERT(cond) _Static_assert(cond, #cond) typedef union { s
我明白人们会使用 C11 的“泛型”做什么,我想在静态断言中使用它来保证两个用户定义类型 (typedef) 是相同的原始类型。 我制作了一个宏,将每个原始类型映射到一个枚举值,并验证它是否按预期工作
例如,在C11中,可以合法地写:。你会得到1020美元。但它不会让你写下:。GCC返回。有时在表达式之外使用_STATIC_ASSERT会很不方便,因为您不太可能使用基于预处理器宏的伪函数来验证它们的
减少到最简单的可复制大小: #include #ifdef static_assert static_assert(1 == 1, "oops!"); #endif 用 -std=c99 -peda
我是一名优秀的程序员,十分优秀!