c - 전처리기란 - ifndef



C 전 처리기의 strlen? (3)

넌 할 수있어:

#define MYSTRING sizeof("bob")

그 말은 내 컴퓨터에 4라고 말합니다. 끝까지 null이 추가 되었기 때문입니다.

물론 이것은 문자열 상수에 대해서만 작동합니다.

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 문자를 더한 크기.

C 전처리 기에서 strlen() 을 구현할 수 있습니까?

주어진:

#define MYSTRING "bob"

일부 전 처리기 매크로, X , 내가 말할 수 있을까요 :

#define MYSTRING_LEN X(MYSTRING)

Answer #1

예 : #define MYSTRING_LEN(s) strlen(s)

대부분의 컴파일러에서는 상수 인수에 대한 컴파일 타임 상수가 생성되며 그보다 더 잘할 수 없습니다.

다른 말로하면 : 당신은 매크로가 필요 없다. 단지 strlen을 사용한다; 컴파일러는 당신을 위해 일을 수행 할만큼 똑똑합니다.


Answer #2

전처리 기는 사용하지 않지만 sizeof는 컴파일시 해결됩니다. 문자열이 배열에 있으면 컴파일 타임에 문자열을 사용할 수 있습니다.

static const char string[] = "bob";
#define STRLEN(s) (sizeof(s)/sizeof(s[0]))

STRLENstrlen() 과는 달리 null 종결 STRLEN 포함한다는 사실을 명심하십시오.





strlen