C 宏 이 완전히 전개 되 지 않 은 경우
1749 단어 c
매크로 가 완전히 전개 되 지 않 은 상황 을 만 났 다.
#include
#include
/* Use printf inside the definition */
#define PRINTF(fmt, args...) do { printf(fmt, ##args); } while (0)
/* Make printf represent as the encapsulated print */
#define printf PRINTF
int main(int argc, char* *argv) {
int p = 100;
printf("p = %d
", *p);
return EXIT_SUCCESS;
}
PRINTF 에 printf 라 는 이름 을 사 용 했 습 니 다.그리고 printf 를 표준 이름 으로 하여 실제 봉 인 된 PRINTF 를 가리 키 려 고 합 니 다.
결 과 는 PRINTF 함수 가 정의 되 지 않 은 경우 가 발생 합 니 다.
원인 을 분석 해 보면
1. 매크로 가 열 렸 을 때 프 리 프로세서 가 printf 를 만 나 최근 설명 에 따라 실 행 됩 니 다.PRINTF 를 사용 할 수 있 음 을 발견, (1 층 전개)
2. 그러나 PRINTF 를 펼 치 려 고 할 때 PRINTF 의 정 의 는 printf 를 포함 하고 있 으 며, 2 층 전 개 를 허용 할 경우.이 허용 되 는 논리 에 따라 3 층 전 개 를 실행 해 야 합 니 다.이렇게 하면 사 순환 이 되 기 때문에 중단 합 니 다.(2 층 전개 중지)
가장 안쪽 의 매크로 정 의 를 바 꾸 면 정상적으로 실행 할 수 있 습 니 다.
#include
#include
#include
int printf2(char const *fmt, ...) {
int n = 0;
va_list args;
va_start(args, fmt);
n = vprintf(fmt, args);
va_end(args);
return n;
}
/* Use printf inside the definition */
#define PRINTF(fmt, args...) do { printf2(fmt, ##args); } while (0)
/* Make printf represent as the encapsulated print */
#define printf PRINTF
int main(int argc, char* *argv) {
int p = 100;
printf("p = %d
", p);
return EXIT_SUCCESS;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.