2013-02-22 3 views
0

최근이 코드에 온 :가변 인수 길이로 '정의'를 사용하지 않는 좋은 이유가 있습니까?

#define LOG(type, str)      printf(str) 
#define LOG1(type, str,arg1)    printf(str,arg1) 
#define LOG2(type, str,arg1,arg2)   printf(str,arg1,arg2) 
#define LOG3(type, str,arg1,arg2,arg3)  printf(str,arg1,arg2,arg3) 
#define LOG4(type, str,arg1,arg2,arg3,arg4) printf(str,arg1,arg2,arg3,arg4) 

코드가 최근에 작성되었습니다. 그래서 나는 그것이 C99로 컴파일 될 수 있다고 생각합니다.

제 질문은 가변 인수 길이가있는 간단한 매크로를 사용하지 않는 이유는 무엇입니까? 우리는 단지 LOG 매크로와 그 이상으로 제한 할 것입니다. 예를 들어, LOG5, LOG6 등을 추가 할 필요가 없습니다. 스택 추적이 발생하거나 메모리가 부족하면이 솔루션을 유용하게 사용할 수있는 무언가가 발생합니다.

필자는 최소한의 라인을 얻을 수 있다면 미니멀리스트 다. 하지만 나는 여기서 뭔가를 놓치고 있니? 이 의도적 이었습니까 아니면 잘못된 코딩 방법 이었습니까?

+3

AFAIK 코드가 C99에서 타겟팅되지 않으면 AFAIK로 매크로를 작성한 유일한 방법입니다. 또한 : 지구상에서 왜 이것이 기능이 아닌지 나는 모른다. – Jon

+0

@ 존, 릴리스 빌드에 로그가 필요 없다고 가정하면 전체 함수 호출을 저장할 수 있습니다. '__naked__' 가지 마세요. 아, 그리고 이것도 로그 라인을 위해 모든 문자열 리터럴을 닦아 버릴 것입니다. –

+0

@RomanSaveljev : 함수를 저장하는 것이 * 중요하다고 먼저 설득해야합니다. :-) – Jon

답변

1

가변 프로세서 매크로에 대한 전 처리기 지원은 나에게 유일한 이유가됩니다. 우리는 프로젝트 LOG, LOG1 etc에서 수십 년간 있었지만 최근에 ...으로 업그레이드했습니다. 위키 피 디아 당으로

:는 GNU 컴파일러 컬렉션 3.0, [2] 비주얼 스튜디오 2005, [3] C++ 빌더 2006 :

여러 컴파일러는 C 및 C++ 코드를 컴파일 가변 인자 매크로를 지원 및 Oracle Solaris Studio (이전 Sun Studio) Forte Developer 6 업데이트 2 (C++ 버전 5.3) [5] GCC는 Objective-C 컴파일시 이러한 매크로도 지원합니다.

플랫폼을 알고 계신다면 멋진 가변 변수 매크로를 사용하십시오. 지원할 것이 거의 없다면 더 많은 것들이 더 흥미로울 수 있습니다.

관련 문제