私は非常に大きなコードベースで作業しており、最近 GCC 4.3 にアップグレードしたところ、次の警告が表示されるようになりました。
警告: 文字列定数から 'char*' への変換は非推奨です
明らかに、これを修正する正しい方法は、次のような宣言をすべて見つけることです。
char *s = "constant string";
または次のような関数呼び出し:
void foo(char *s);
foo("constant string");
それらをconst char
ポインターにします。しかし、それは少なくとも564個のファイルに触れることを意味し、現時点では実行したい作業ではありません。現在の問題は、私が実行しているのが-ウェラーなので、これらの警告を抑制する方法が必要です。どうすればいいでしょうか?
ベストアンサー1
文字列リテラルを渡す関数では、の代わりに を型として"I am a string literal"
使用する必要があります。char const *
char*
何かを直すつもりなら、きちんと直しましょう。
説明:
文字列リテラルは型であるため、変更される文字列を初期化するために文字列リテラルを使用することはできませんconst char*
。後で変更するためにconst性をキャストすることは未定義の動作したがって、文字列を変更するには、動的に割り当てられた文字列にconst char*
文字列をコピーする必要があります。char
char
char*
例:
#include <iostream>
void print(char* ch);
void print(const char* ch) {
std::cout<<ch;
}
int main() {
print("Hello");
return 0;
}