2013-04-28 6 views
0

const char 문제를 보여주는 gcc 컴파일러의 경고가 있습니다.경고 : 문자열 상수에서 'char *'로의 비 사용 변환

경고를 없애려면 어떻게해야합니까?

감사합니다, 마이클

char * str_convert(int op) { 
    /*returns the string corresponding to an operation opcode. Used for screen output.*/ 
    if(op == PLUS) { 
    return "plus"; 
    } 
    else if (op == MULT) { 
    return "mult"; 
    } 
    else if (op == SUBS) { 
    return "subs"; 
    } 
    else if (op == MOD) { 
    return "mod"; 
    } 
    else if (op == ABS) { 
    return "abs"; 
    } 
    else if (op == MAX) { 
    return "max"; 
    } 
    else if (op == MIN) { 
    return "min"; 
    } 
    else { 
    return NULL; 
    } 
} 
+1

반환 형식을 const char *로 변경하십시오. 왜 스위치/케이스를 사용하지 않을까요? –

+0

내가해야 할 적절한 방법을 배우고 싶다면 예제를 제공해 줄 수 있습니까? 감사. –

답변

2

나는 (내용의 변경을 방지하기 위해) 수정이 반환 형식에 const을 추가 생각합니다. if 캐스케이드를/case로 변경하려고했으나 문제와 관련이 없습니다.

const char * str_convert(int op) { 
    /*returns the string corresponding to an operation opcode. Used for screen output.*/ 
    switch (op) { 
    case ABS: return "abs"; 
    case MAX: return "max"; 
    case MIN: return "min"; 
    case MOD: return "mod"; 
    case MULT: return "mult"; 
    case PLUS: return "plus"; 
    case SUBS: return "subs"; 
    default: return NULL; 
    } 
} 
1

는 또한 컴파일러가 런타임시 평가 된 스위치 문 구현에 사용할 점프 테이블을 대체 할로 호출하는 컴파일 시간 평가 버전, 템플릿 '작전'값을 사용하여 고려하실 수 있습니다 템플리트 값에 따라 N 개의 함수가 있습니다.

template <int op> 
const char * str_convert(void) 
{ 
    /*returns the string corresponding to an operation opcode. Used for screen output.*/ 
    switch (op) 
    { 
     case ABS: return "abs"; 
     case MAX: return "max"; 
     case MIN: return "min"; 
     case MOD: return "mod"; 
     case MULT: return "mult"; 
     case PLUS: return "plus"; 
     case SUBS: return "subs"; 
     default: return NULL; 
    } 
}