저는 Head First C 책을 읽고 있는데 변수 인수에 대한 부분입니다. 이 코드는 컴파일하고 완벽하게 작동변수 인수가있는 함수에서 "enum"을 전달할 때 오류가 발생했습니다.
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
enum drink {
MUDSLIDE, FUZZY_NAVEL, MONKEY_GLAND, ZOMBIE
};
double price(enum drink d) {
switch(d) {
case MUDSLIDE:
return 6.79;
case FUZZY_NAVEL:
return 5.31;
case MONKEY_GLAND:
return 4.82;
case ZOMBIE:
return 5.89;
}
return 0;
}
double calc(int args, ...) {
double total = 0;
va_list ap;
va_start(ap, args);
int i;
for (i = 0; i < args; i++) {
int currentDrink = va_arg(ap, int);
total += price((drink) currentDrink);
}
va_end(ap);
return total;
}
int main() {
printf("Price is %.2f\n", calc(2, MONKEY_GLAND, MUDSLIDE));
return 0;
}
:
나는 다음과 같은 코드를 썼습니다.하지만 ... 내 솔루션에는 두 가지 다른 줄이 있습니다.
내 :
int currentDrink = va_arg(ap, int);
total += price((drink) currentDrink);
도서 : 나는 실행 중에이 책에서 제안 된 솔루션 있지만 오류를 사용하려하고 경고보고
enum drink currentDrink = va_arg(ap, enum drink);
total += price(currentDrink);
: '음료 '을 (를) 통과하면'int '로 승격됩니다.
이 책은 리눅스에서 gcc 컴파일러로 사용됩니다. Windows에서 gcc를 사용하고 있습니다.
질문 :이 책에서 제안한 코드를 컴파일 할 수없는 이유는 무엇입니까?
편집 잘못 구성되었습니다. C++ 컴파일러를 사용하여 C를 사용하려고 했었습니다. 하지만 여전히 문제가 남아 있습니다. C++에서 실행시 경고 및 오류가 발생하는 이유는 무엇입니까? 기능에
내가 복제 할 수 없습니다 HTH를
및
:
일부 코딩 - 가이드 라인은 모든 곳에서
int
를 사용하여, 전체 유형의enum
사용을 피하기 만enum
상수를 정의하는 말 너의 문제. 책 버전은 나를 위해 잘 작동합니다. gcc의 어떤 버전을 사용하고 있습니까? 'gcc --version'을 실행하십시오. – ooga컴파일러에 대한 버전 정보를 제공해주십시오. 또한 스타일과 단순성을 위해 enum 정의에 다음을 사용하십시오.'typedef enum drink { MUDSLIDE, FUZZY_NAVEL, MONKEY_GLAND, ZOMBIE } drink; 그렇게하면'enum drink '를 입력하는 대신'drink'를 유형으로 사용할 수 있습니다. – DevNull
@ooga gcc (tdm-1) 4.5.2 – Macabeus