줄임표를 다른 변량 함수에 전달
나는 대략 30가지의 다양한 기능을 가지고 있다.각자는 하나의 경로를 최종 주장으로 받아들인다. 예를 들어, 다음과 같다.
bool do_foo(struct *f, int q, const char *fmt, ...)
각 기능에서 확장된 형식이 그때보다 작거나 일정한 크기와 동일한지 확인해야 한다.그래서 같은 코드 덩어리를 복사/붙여넣고 몇 글자인지 확인하려고vsnprintf()
인쇄되지 않음, 설정됨errno
따라서 글에서 벗어나게 될 것이다.
내가 하고 싶은 것은 이것을 하기 위해 함수를 쓰는 것인데, 이것은 안전한 크기라고 알려진 정적으로 할당된 (확장된) 문자열이나, 실패 시 새로 초기화된 문자열로, NULL에 대해 확인될 수 있다.또한 체크는 문자열이 절대 경로인지 상대 경로인지 판단해야 하며, 이는 문자열의 안전한 크기에 영향을 미친다.코드가 중복되어 냄새가 나기 시작한다.
내 기능의 엔트리에서 다른 기능으로 줄임표 내용을 전달할 수 있는 방법이 있을까?아니면 내가 전화해야 하나?va_start()
먼저, 그리고 나서va_list
도우미 기능까지?
편집:
나는 그 법안을 통과시키는 것에 전혀 반대하지 않는다.va_list
도우미에게 다른 건 없는지 확인하고 싶었어내가 보기엔 컴파일러가 그 변칙적인 논쟁들이 어디서부터 시작되는지 이해하고 있는 것 같으니까, 그냥 그것들을 전달하라고 말해도 되는지 궁금했을 뿐이다.
할 수 없고, 오직 주장들을 그대로 전할 수 있을 뿐이다.va_list
. comp.lang.c FAQ를 참조하십시오.
일반적으로 변량 함수(즉, 변수의 가변 개수를 취하는 함수)를 C에 쓰고 있는 경우에는 각 함수의 두 가지 버전, 즉 줄임표(줄임표)를 써야 한다....
() 그리고 다음 중 하나를 필요로 하는 것이다.va_list
줄임표를 찍는 버전은va_start
, 다음 버전을 호출하십시오.va_list
, callva_end
, 그리고 돌아온다.그 기능의 두 버전 사이에는 코드 중복이 필요 없다. 한 버전에서는 다른 버전에게 전화를 걸기 때문이다.
아마도 당신은 다음과 같이 가변 매크로를 사용할 수 있을 것이다.
#define FOO(...) do { do_some_checks; myfun(__VA_ARGS__); } while (0)
NB! 변종 매크로 C99 전용
이게 도움이 될지 모르겠는데, 참조로 변수에 접근할 수 있어.이것은 일종의 교활한 속임수지만 불행히도 최종 기능 정의에서 줄임표를 사용하는 것을 허용하지 않을 것이다.
#include <stdio.h>
void print_vars(int *n)
{
int i;
for(i=0;i<=*n;i++)
printf("%X %d ", (int)(n+i), *(n+i));
printf("\n");
}
void pass_vars(int n, ...)
{
print_vars(&n);
}
int main()
{
pass_vars(4, 6, 7, 8, 0);
return 0;
}
내 pc에서 출력한다.
$ ./a.out
BFFEB0B0 4 BFFEB0B4 6 BFFEB0B8 7 BFFEB0BC 8 BFFEB0C0 0
도우미에게 va_list를 전달해야 한다.
참조URL: https://stackoverflow.com/questions/695982/passing-an-ellipsis-to-another-variadic-function
'programing' 카테고리의 다른 글
Java 8 - 목록을 변환하는 가장 좋은 방법: 지도 또는 포어치? (0) | 2022.04.22 |
---|---|
부에 있는 원소들.JS 전환 그룹이 이동 중에 제대로 애니메이션화되지 않음 (0) | 2022.04.22 |
하위 구성 요소 내에서 props.value 수정 (0) | 2022.04.22 |
Quill 편집기 + VueJS2 이미지 업로드:URL에 대한 Base64 이미지 (0) | 2022.04.22 |
vue js의 구성 요소에 데이터 구성 요소를 전달하는 가장 좋은 방법 (0) | 2022.04.22 |