長さ値の文字列に変換したい共通の文字列マクロがあり、可能であればすべてマクロ内にあるため、すべてが.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"`
#define PAYLOAD_LEN 3
これは不可能だと思います。たとえば、PAYLOAD_LEN をリテラルとして定義してから stringify する必要があると思います。
.rodata
実行時に忘れて生成することはできますが、したくありません。
char lv[64];
snprintf(lv, sizeof lv, "<preamble>%zu:" PAYLOAD, PAYLOAD_LEN);
これは、たとえば、ここや他の多くの質問で既に尋ねられ、回答されている質問ではないことに注意してください。