1

長さ値の文字列に変換したい共通の文字列マクロがあり、可能であればすべてマクロ内にあるため、すべてが.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);

これは、たとえば、ここや他の多くの質問で既に尋ねられ、回答されている質問ではないことに注意してください。

4

1 に答える 1

2

sizeofプリプロセッサではなくコンパイラによって処理されるため、そのアプローチを取ることはできません。他の 2 つのオプションは機能しますが、どちらが適しているかは状況によって異なります。

于 2012-06-27T19:40:10.447 に答える