C언어 매크로 함수 관련하여 궁금한점 있습니다
글쓴이: stock9343 / 작성시간: 토, 2021/09/25 - 4:59오전
안녕하세요 C언어의 매크로 함수를
아래와 같이 사용하였습니다.
#define str(x) #x
#define trans(x) str(x)
#define list cell_a cellb
out = trans(list) ;
결과는 cell_a cell_b
가 나옵니다.
list의 값이 출력됨
추가적으로 trans매트로를 안쓰고
out=str(list)로 해버리니
결과는 list라는 변수명이
그대로 나옵니다.당연히 #라는 토큰때문에
문자 그대로 뽑힙니다
하지만, 위의 trans(x)조합시에는
값이 출력되는 원리가 궁금하네요.
Forums:
trans(x) 는 아래처럼 변경될 거고요.
trans(x) 는 아래처럼 변경될 거고요.
str(x) 는
와 같이 변경 됩니다. "#" 은 문자열로 변환을 시킨다는 점에 주의 하셔야 합니다.
https://norux.me/22 참고 해 보시면 도움이 될 듯 싶습니다.
감사합니다 큰 도움이 되었습니다
이해가 되었습니다
C preprocessor의 미묘한 동작 덕분입니다.
C preprocessor의 미묘한 동작 덕분입니다.
1. function-like macro의 macro replacement에서, 각 argument는 argument substitution 직전에 macro replaced 됩니다.
즉,
2. 그런데 function-like macro의 parameter가 # operator의 뒤에 있는 경우는 예외가 됩니다. 이 때 argument는 macro replacement 없이 바로 string literal로 변환됩니다.
이런 특성을 활용하면 아래와 같은 코드를 작성할 수 있지요.
상세한 설명 감사합니다
덕분에 완전히 이해했습니다
댓글 달기