gcc 6.1.0에서는 컴파일되었지만 gcc에서는 컴파일되지 않은 다음 코드 조각에 대해 "오류 : 배열 유형이있는 표현식에 할당"이라는 오류가 있습니다 4.4.6.va_arg()를 사용하여 argu 구문을 분석하는 중 gcc-6.1.0에서만 오류가 발생했습니다.
void foo(char *fmt, ...)
{
va_list ap;
int d;
char *c, *s;
typedef unsigned char mac_t[6];
mac_t ad;
va_start(ap, fmt);
while (*fmt)
switch (*fmt++) {
case 's':
s = va_arg(ap, char *);
printf("string %s\n", s);
break;
case 'd': /* int */
d = va_arg(ap, int);
printf("int %d\n", d);
break;
case 'c': /* char */
ad = va_arg(ap, mac_t); //**** error here only on gcc 6.1.0 compiler
printf("With unsigned char: char %c.%c.%c.%c.%c.%c\n", ad[0],ad[1],ad[2],ad[3],ad[4],ad[5]);
}
va_end(ap);
}
int main()
{
foo("%c", "AABBCC");
}
어떻게이 오류를 해결할 수 있습니까? gcc 4.4.6에서는 컴파일이 원활하게 진행됩니다. 몇 가지 이유로 gcc 6.1.0 컴파일러 만 사용해야합니다.
typedef unsigned char mac_t[6];
mac_t ad;
을 그리고 당신은 시도 :
나는 strcpy (ad, va_arg (ap, mac_t));를 시도했다. 컴파일러 오류가 발생하지 않습니다. 그러나 그것은 목적을 달성하지 못합니다. 인수가 배열 광고에 복사되지 않습니다. 광고 내용을 인쇄 할 때 잘못된 데이터가 표시됩니다. –
배열은 함수에 전달 될 때 포인터 유형으로 감소합니다. gcc 6.1.0에서는 올바르게 처리되지만 배열에 할당 할 수는 없습니다. – jxh
@jxh 정확합니다. 포인터에 대해 strcpy()가 작동하지 않습니다. gcc 6.1.0에서 인수를 구문 분석하는 다른 방법은 없습니까? –