0

我收到来自 gcc 编译器的警告,显示 const 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;
  }
}
4

2 回答 2

2

我认为修复是添加const到返回类型(以防止修改内容)。我还将 if 级联更改为 switch / 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;
  }
}
于 2013-04-28T23:35:53.700 回答
1

您可能还希望考虑使用模板化的“op”值,因为编译器将替换它将用于 switch 语句实现的跳转表,在运行时评估,编译时评估版本调用 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;
    }
}
于 2013-07-30T12:59:48.290 回答