警告:不推荐将字符串常量转换为'char *'

时间:2013-04-28 22:29:43

标签: gcc gcc-warning netcdf

我收到了来自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;
  }
}

2 个答案:

答案 0 :(得分:2)

我认为修复是将const添加到返回类型(以防止修改内容)。 我也将if cascade更改为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;
  }
}

答案 1 :(得分: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;
    }
}