inner_LOAD_ATOM(buffer, ATOM_MAX)
이 scanf("%" "ATOM_MAX" "s", x)
으로 변환되었지만 줄 바꿈 된 버전이 아닌 이유는 무엇입니까? ATOM_MAX (식별자)가 inner_LOAD_ATOM
또는 LOAD_LINE
에 "전달"되기 전에 10으로 바뀌고 래퍼가 쓸모 없게됩니다. 래퍼가 왜 필요한지에 대한 정교한 대답은 매우 높이 평가 될 것입니다. 첫 번째 패스 #y
에 #ATOM_MAX
로 대체하고도 캐릭터 라인 얻을 것이다 때문에매크로는 대체 매크로 대신 이전 매크로 식별자를 문자열 화합니다.
#include <stdio.h>
#define ATOM_MAX 10
#define inner_LOAD_ATOM(x, y) scanf("%" #y "s", x) /* inner part */
#define LOAD_ATOM(x, y) inner_LOAD_ATOM(x, y) /* wrapper of inner_LOAD_ATOM */
int main(void)
{
char buffer[ATOM_MAX] = {0, };
/* wrapped works fine */
LOAD_ATOM(buffer, ATOM_MAX);
/* [Warning] unknown conversion
type character 'A' in format [-Wformat=] */
inner_LOAD_ATOM(buffer, ATOM_MAX);
printf("%s\n", buffer);
return 0;
}