code

#토큰 없이 식별자 정의

starcafe 2023. 10. 30. 21:09
반응형

#토큰 없이 식별자 정의

다음 문장의 의미는 무엇입니까?

#define FAHAD

나는 다음과 같은 진술을 잘 알고 있습니다.

#define FAHAD 1

그러나 토큰이 없는 #defin 문은 무엇을 의미합니까?그것이 상수 정의와 비슷하다는 것입니까?

값이 없는 상수를 정의하는 것은 전처리기에 대한 플래그 역할을 하며 다음과 같이 사용할 수 있습니다.

#define MY_FLAG
#ifdef MY_FLAG
/* If we defined MY_FLAG, we want this to be compiled */
#else
/* We did not define MY_FLAG, we want this to be compiled instead */
#endif

라는 뜻입니다.FAHAD정의되어 있습니다. 나중에 다음을 사용하여 정의 여부를 확인할 수 있습니다.

#ifdef FAHAD
  //do something
#else
  //something else
#endif

또는:

#ifndef FAHAD //if not defined
//do something
#endif

실제 사용 예는 플랫폼에서 함수 또는 헤더를 사용할 수 있는지 확인하는 것입니다. 일반적으로 빌드 시스템은 매크로를 정의하여 실제로 컴파일하기 전에 일부 함수 또는 헤더가 존재함을 나타냅니다. 예를 들어 이는 다음을 확인합니다.signal.h사용 가능:

#ifdef HAVE_SIGNAL_H
#   include <signal.h>
#endif/*HAVE_SIGNAL_H*/

일부 기능을 사용할 수 있는지 확인합니다.

#ifdef HAVE_SOME_FUNCTION
//use this function
#else
//else use another one
#endif

조금도#define원래 식별자를 대체 토큰으로 바꿉니다.대체 토큰이 없는 경우 대체 토큰은 비어 있습니다.

#define DEF_A "some stuff"
#define DEF_B 42
#define DEF_C
printf("%s is %d\n", DEF_A, DEF_B DEF_C);

확장 대상:

printf("%s is %d\n", "some stuff", 42 );

사이에 간격을 뒀습니다.42그리고.)"아무것도"하지 않음을 나타내다DEF_C최소한 언어적인 면에서는 전처리기의 출력은 토큰의 흐름에 불과합니다.(실제 컴파일러를 사용하면 일반적으로 전처리기 출력을 볼 수 있습니다.여기에 빈 공간이 있는지 여부는 실제 전처리기에 따라 달라집니다.GNU cpp의 경우 1개가 있습니다.)

지금까지의 다른 답변들과 마찬가지로, 당신은 다음과 같이 사용할 수 있습니다.#ifdef식별자가 다음과 같았는지를 테스트합니다.#defined. 다음과 같이 쓸 수도 있습니다.

#if defined(DEF_C)

예를 들어.이러한 검정은 확장이 비어 있더라도 양성(즉, 식별자가 정의됨)입니다.

#define FAHAD

이것은 컴파일러 플래그와 같은 역할을 할 것이고, 그 아래에서 일부 코드를 수행할 수 있습니다.이것은 컴파일러가 이 컴파일러 옵션 아래에 존재하는 코드를 컴파일하도록 지시할 것입니다.

#ifdef FAHAD
printf();
#else
/* NA */
#endif

언급URL : https://stackoverflow.com/questions/18074663/define-identifier-without-a-token

반응형