Program Club

매크로 인수를 문자열 리터럴로 사용하는 방법은 무엇입니까?

proclub 2020. 10. 23. 19:39
반응형

매크로 인수를 문자열 리터럴로 사용하는 방법은 무엇입니까?


변수 이름의 문자열 리터럴 표현과 변수 자체를 함수로 전달하는 매크로를 작성하는 방법을 알아 내려고합니다.

예를 들어 다음과 같은 기능이 있습니다.

void do_something(string name, int val)
{
   cout << name << ": " << val << endl;
}

이 작업을 수행 할 수 있도록 매크로를 작성하고 싶습니다.

int my_val = 5;
CALL_DO_SOMETHING(my_val);

다음과 같이 인쇄됩니다. my_val: 5

다음을 시도했습니다.

#define CALL_DO_SOMETHING(VAR) do_something("VAR", VAR);

그러나 짐작할 수 있듯이 따옴표 안의 VAR은 대체되지 않고 문자열 리터럴 "VAR"로 전달됩니다. 따라서 매크로 인수를 문자열 리터럴 자체로 바꾸는 방법이 있는지 알고 싶습니다.


전 처리기 #연산자 사용 :

#define CALL_DO_SOMETHING(VAR) do_something(#VAR, VAR);

스트링 화 연산자를 사용하려고합니다.

#define STRING(s) #s

int main()
{
    const char * cstr = STRING(abc); //cstr == "abc"
}

#define NAME(x) printf("Hello " #x);
main(){
    NAME(Ian)
}
//will print: Hello Ian

이 솔루션을 시도해보십시오.

#define QUANTIDISCHI 6
#define QUDI(x) #x
#define QUdi(x) QUDI(x)
. . . 
. . .
unsigned char TheNumber[] = "QUANTIDISCHI = " QUdi(QUANTIDISCHI) "\n";

참고 URL : https://stackoverflow.com/questions/10507264/how-to-use-macro-argument-as-string-literal

반응형