【问题标题】:GNU C preprocessor: Stringify the result of a macro evaluationGNU C 预处理器:字符串化宏评估的结果
【发布时间】:2012-06-29 07:42:27
【问题描述】:

我有一个通用的字符串宏,我想将它转换为长度值字符串,如果可能的话,全部都在宏中,所以一切都以.rodata 结尾。

#define PAYLOAD "xyz"
#define PAYLOAD_LEN (sizeof(PAYLOAD)-1)

我想使用 PAYLOAD_LEN,作为一个字符串,作为另一个字符串的一部分,例如

const char lv_macro[]  = "<preamble>" PAYLOAD_LEN ":" PAYLOAD;
const char lv_wanted[] = "<preamble>3:xyz"`

我怀疑这是不可能的,我应该将 PAYLOAD_LEN 定义为文字,例如#define PAYLOAD_LEN 3 然后stringify

我可以但不想忘记 .rodata 并在运行时生成它,例如

char lv[64];
snprintf(lv, sizeof lv, "<preamble>%zu:" PAYLOAD, PAYLOAD_LEN);

请注意,这不是例如here 和许多其他问题中已经提出和回答的问题。

【问题讨论】:

标签: c gcc c-preprocessor stringification


【解决方案1】:

sizeof 由编译器处理,而不是预处理器,因此您不能采用这种方法。其他两个选项将起作用,哪个更适合取决于您的情况。

【讨论】:

    猜你喜欢
    • 2011-03-26
    • 1970-01-01
    • 2019-06-21
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 2015-10-09
    • 2011-11-28
    相关资源
    最近更新 更多