0

const char の問題を示す gcc コンパイラからの警告があります。

警告を取り除く方法は?

ありがとう、マイケル

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 に答える