A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
> まず、その状態は「コンパイルは出来る」とは言えません。
> 警告(warning)ではなくエラー(error)が出るはずです。
C++ ならそうですね。下の代入二つでconst_castが必要です。
例えばVC7.1なら「error C2440: '=' : 'const char *' から 'char *' に変換できません。」等と言われます。
でも、Cなら通るので、おそらく質問者さんはC言語なのだと思います。
同VC7.1では「warning C4090: '=' : 異なる 'const' 修飾子です。」といわれます。
>質問者さん
Cの時代は const の扱いも結構ゆるい規則でしたが、例えばC++などはこれを厳密に解釈します。
const を正しく扱っていないようなCのコードに慣れてしまうと、将来的に移行などで苦労するかもしれません。
また、きれいに書かれたCのソースはかなりの部分までC++でもそのまま使えますが、この手の警告が多数出るようなCのコードは「移植」しないとまず動かなくなってしまいます。
当面C++に移行する予定がなかったとしても、スキルアップや保守性なども考えて、最初からきちんと書いておくことをお勧めします。
No.3
- 回答日時:
まず、その状態は「コンパイルは出来る」とは言えません。
警告(warning)ではなくエラー(error)が出るはずです。
char *p; // OK: 読み書き両用ポインタを宣言
const char *q; // WARNING: 読み取り専用ポインタを宣言しているが、初期値が入っていないので使い道がない。
const char a='z'; // OK: 読み取り専用変数に文字定数を入れる
const char *pq=&a; // OK: 読み取り専用ポインタに読み取り専用変数のアドレスを渡している。
p=q; // ERROR: 読み書き両用ポインタに読み取り専用のポインタを渡している
p=pq; // ERROR: p = q; に同じ。
読み取り専用メモリを書き込めるようにしたら、意味がありませんよね?
そういう理由です。
なお、この場合は ERROR よりも WARNING の方が問題です。
q は確実に初期化されている必要があるので、普通はこういうコード自体を思いつきません。
短いテストであっても、なるべく結果ありきのコードを書く癖をつけると理解しやすくなりますよ。
No.2
- 回答日時:
がると申します。
んっと…このステップ数にしては、結構な量の警告が予想されるのですが。
とりあえず
・ポインタと実態の違い、あるいは実態を作るタイミング
・const修飾子の意味
をしっかりと学ばれることを強くお勧めいたします。
ちなみに、コンパイルオプションでワーニング出力を抑止する、といった類の場当たり的対応はバグの温床を生むだけなので、お勧めいたしません。
蛇足かとは思いますが、念のため。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
準・究極の選択
「年収1000万円で一生カレーライス」か 「年収180万円で毎日何でも食べ放題」 あなたはどちらを選びますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CStringからchar*への型変換に...
-
char*を初期化したいのですが
-
C言語にて構造体のメンバがNULL...
-
C言語のintとcharの違いってな...
-
strcpy関数で文字型変数へのポ...
-
char 文字列型 の表現範囲が-12...
-
警告
-
fstream型オブジェクトを関数の...
-
VC++ char[10]へのCString値の代入
-
SetWindowTextについて。
-
C++17で、unsigned char * 配列...
-
36進数
-
文字列の途中から途中までを抽出
-
DWORDとcharの変換
-
エクセルのMID関数は、C言語では?
-
ライブラリ関数
-
ポインタを使用 [数字列を数値...
-
C言語入門者です。今ポインタの...
-
小数点入りの文字列をfloat型に...
-
ASCIIコードへの変換方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
char*を初期化したいのですが
-
C言語のintとcharの違いってな...
-
CStringからchar*への型変換に...
-
C言語にて構造体のメンバがNULL...
-
fstream型オブジェクトを関数の...
-
小数点入りの文字列をfloat型に...
-
char型にint型の数値を代入する。
-
const char* s1とただのchar s1...
-
new charとnew char[N]の違いは?
-
動的メモリの初期化方法について。
-
エクセルのMID関数は、C言語では?
-
C言語 strstrの実装
-
SetWindowTextについて。
-
char 文字列型 の表現範囲が-12...
-
文字列の途中から途中までを抽出
-
2次元配列の文字"列"の初期化方法
-
DWORDとcharの変換
-
C++17で、unsigned char * 配列...
-
C言語の文字リテラル中の16進文...
-
strcat関数を自作したいです
おすすめ情報