반응형
매크로 인수를 문자열 리터럴로 사용하는 방법은 무엇입니까?
변수 이름의 문자열 리터럴 표현과 변수 자체를 함수로 전달하는 매크로를 작성하는 방법을 알아 내려고합니다.
예를 들어 다음과 같은 기능이 있습니다.
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
반응형
'Program Club' 카테고리의 다른 글
| iptables는 IP 주소를 제외하고 포트 8000에 대한 액세스를 차단합니다. (0) | 2020.10.23 |
|---|---|
| Eclipse 프로젝트로 JSON 가져 오기 (0) | 2020.10.23 |
| NPM에서 이전 버전의 패키지 가져 오기 (0) | 2020.10.23 |
| Sublime Text 2에서 확장 된 모든 사이드 바 폴더 축소 (0) | 2020.10.23 |
| VueJS는 조건부로 요소에 대한 속성을 추가합니다. (0) | 2020.10.23 |