2014-04-01 4 views
1

방금 ​​C에서 가변 함수를 발견했으며 일반 통지 typedef로 정의했습니다. 텍스트 문자열에 대한 포인터는 선택적으로 인수와 함께 전송 될 수 있습니다. 예를 들어 어디서나 모든 출력 문자열 조작을 원할 경우 일반적인 디버그 기능으로 유용합니다.variadic 함수에 대한 래퍼에서 선택적 인수를 중계합니다.

가능한 한 제 자신의 C 파일을 원하기 때문에 init 호출에 채워진 상위 코드에서 가능한 콜백에 대한 포인터를 포함하는 정적 변수가 있습니다. 더 높은 코드가 관심이 없다면 포인터가 null 일 수 있기 때문에 null이 아닌 경우 포인터를 통해서만 호출하는 로컬 래퍼를 사용합니다. 그러나 '...'로 표시되는이 퍼지 항목을 전달하는 방법을 알아 내고 인수 목록에서 '...'을 사용하여 함수를 호출하면 구문 오류가 발생합니다.

이 작업을 수행 할 수있는 방법이 있습니까? 아니면 더미 로컬 처리기가 있고 초기화 포인터가 null 콜백을 포인터로 설정해야합니까?

+0

가변 기능을 가지고하는 것이 좋습니다. 한 두 가지 예를 들어 주시겠습니까? – glglgl

+0

디버그를 예로 들어 보겠습니다. 대부분은 단일 텍스트 인'DebugMessage (특정 오류가 무엇이든간에) '이지만 일부 정보에서는 추가 정보를 추가 할 수 있습니다. 가장 간단한 것은 간단한 변수의 값입니다. 이제 printf를 사용하여 문자열 버퍼를 할당하고 다시 채우지 만, DebugMessage ("테스트 포인트 % d에서 실패; var1 = % d, var2 = % d", 23, a , b)'DebugMessage는 GUI 기반 데스크탑 PC (대화 상자 팝업)보다 임베디드 플랫폼 (직렬 출력)에서 다른 일을 할 가능성이 높기 때문에 상위 레벨에서 필요합니다. 더 명확 해? –

+0

부분적으로 그렇습니다. 당신은 행복하게 variadic 함수를 만들 수 있습니다. 그러나 항상'va_list'를 취하고 다른 것들에 의해 호출되는 하나의 버전을 제공하는 것을 기억하십시오. 저자가 "잊어 버린"라이브러리가 있으며, 확장하는 것은 실제 PITA입니다. – glglgl

답변

2

가변 인수를 전달할 수 없습니다. 당신은 그들을 va_list으로 가져와 이것을 내부 함수에 전달해야합니다.

this Question at the C FAQ을 살펴보십시오. printf으로 전달하려는 가변적 인 error 함수를 정의합니다. 이것은 귀하의 유스 케이스입니다. same FAQs에서

, 일반적으로 모든에 대한 va_list을 복용 버전 (또는 대부분) 내가 정확히 무슨 뜻인지 이해하지

관련 문제