如何在C中编译时打印sizeof()的结果?
现在我使用静态断言(基于其他Web资源自酿)来将sizeof()结果与各种常量进行比较.虽然这有效但它远非优雅或快速.我还可以创建变量/ struct的实例并查看映射文件,但这比直接调用/命令/运算符更不优雅和快速.此外,这是一个使用多个交叉编译器的嵌入式项目......因此,为目标构建和加载示例程序然后读出一个值比上述任何一个都更麻烦.
在我的情况下(旧的GCC),#warning sizeof(MyStruct)在打印警告之前实际上并没有解释sizeof().
有没有办法在编译时打印a constexpr或#defined值的值?我想要相当于std::cout <<或某种方式来做类似的事情
constexpr int PI_INT = 4;
static_assert(PI_INT == 3,
const_str_join("PI_INT must be 3, not ", const_int_to_str(PI_INT)));
Run Code Online (Sandbox Code Playgroud)
编辑:我可以用constexprs 做一些基本的编译时打印,至少在gcc上做类似的事情
template <int v>
struct display_non_zero_int_value;
template <>
struct display_non_zero_int_value<0> { static constexpr bool foo = true; };
static constexpr int v = 1;
static_assert(v == 0 && display_non_zero_int_value<v>::foo, "v == 0");
Run Code Online (Sandbox Code Playgroud)
这给了我error: incomplete type ‘display_non_zero_int_value<1>’ used in nested name specifier static_assert(v == 0 && display_non_zero_int_value<v>::foo, "v == 0");.(另一方面,icpc不太有帮助,只是说error: incomplete …
我正在做一些微控制器编程,并且我有以下代码:
#define F_CPU 8000000
#define F_ADC (F_CPU / 64.0)
#define T_ADC (1.0/F_ADC)
Run Code Online (Sandbox Code Playgroud)
有没有办法在编译时打印出 T_ADC 的计算值?我尝试将其字符串化
#define STRINGIFY(s) XSTRINGIFY(s)
#define XSTRINGIFY(s) #s
#pragma message ("T_ADC " STRINGIFY(T_ADC))
Run Code Online (Sandbox Code Playgroud)
但这只是给出了宏展开式“(1/(8000000/64))”,而不是实际值。
printf这是一个微控制器程序,在启动时执行此操作很尴尬。我正在使用 gcc,如果有帮助的话,我很乐意使用任何非标准 gcc 功能。