Cプリプロセッサで実装することは可能strlen()
ですか?
与えられた:
#define MYSTRING "bob"
次のようなプリプロセッサ マクロがありX
ますか。
#define MYSTRING_LEN X(MYSTRING)
Cプリプロセッサで実装することは可能strlen()
ですか?
与えられた:
#define MYSTRING "bob"
次のようなプリプロセッサ マクロがありX
ますか。
#define MYSTRING_LEN X(MYSTRING)
できるよ:
#define MYSTRING sizeof("bob")
末尾にnullが追加されているため、私のマシンでは4と表示されます。
もちろん、これは文字列定数に対してのみ機能します。
MSVC 16(cl.exe -Wall /TC file.c
)を使用すると、次のようになります。
#include "stdio.h"
#define LEN_CONST(x) sizeof(x)
int main(void)
{
printf("Size: %d\n", LEN_CONST("Hej mannen"));
return 0;
}
出力:
Size: 11
文字列のサイズとNUL文字。
はい:
#define MYSTRING_LEN(s) strlen(s)
ほとんどのコンパイラでは、これにより定数引数のコンパイル時定数が生成されます...そしてそれ以上のことはできません。
つまり、マクロは必要ありません。strlen を使用するだけです。コンパイラはあなたのために仕事をするのに十分賢いです。