34

Cプリプロセッサで実装することは可能strlen()ですか?

与えられた:

#define MYSTRING "bob"

次のようなプリプロセッサ マクロがありXますか。

#define MYSTRING_LEN X(MYSTRING)
4

4 に答える 4

9

できるよ:

#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文字。

于 2011-02-16T21:10:30.027 に答える
5

はい: #define MYSTRING_LEN(s) strlen(s)

ほとんどのコンパイラでは、これにより定数引数のコンパイル時定数が生成されます...そしてそれ以上のことはできません。

つまり、マクロは必要ありません。strlen を使用するだけです。コンパイラはあなたのために仕事をするのに十分賢いです。

于 2011-02-17T00:22:18.790 に答える