No.1ベストアンサー
- 回答日時:
いろんなところでしょう。
プログラマの負担はむしろ重いです。
○多くの言語では、サブルーチンや関数は、どんな順番で宣言しても、同じように利用できます。
C言語は、先に宣言しないと使えません。
プログラマとしては、場所を考えないといけないので面倒ですが、コンパイラにとっては上から順番に処理すればいいので簡単になります。
※ 他の言語では、「とりあえず保留しておいて、宣言が見つかったら戻る」とか「最初に宣言の一覧を作るために読み込んで、そのあと頭に戻ってコンパイルしなおす」とかの工夫が必要です。
○一番はっきりと違いが出るのは配列でしょう。
他の言語では、添字がちゃんと確保した範囲になっているかチェックし、エラーを出したり、自動で範囲を増やしたりします。
C言語では、そのようなチェックはありません。範囲も増えません。
範囲内で使うように、プログラマが注意しないといけません。
そのかわり「チェックする」動作が無い分、プログラムが軽くなります。
範囲のチェックをしないので、範囲外にアクセスしても、律儀に該当するアドレスにアクセスしにいきます。
例えば int a[10] ;としたとき、 a[10000]=0 ; としても、それ自体はエラーではありません。
しかし、実際にはエラーになることも多いです。
それは、a[10000]のアドレスがOSで保護されているとか、プログラムの他の変数の領域を書き換えてしまったからとかいった理由からです。
まったく影響の無い領域になっていて、何事もなく処理が続く場合もあります。
このような配列の仕様は、脆弱性にもつながります。
例えば、文字列は文字の配列です。\0までが区切りです。
この区切りを忘れると、本来の文字列の範囲を越えて、\0が見つかるまで文字列だと認識します。
ユーザー名だけprintfしようとしたのに、\0が入ってなかったため、続けてパスワードまで表示してしまった、等ということが起りかねません。
この回答へのお礼
お礼日時:2015/05/09 17:08
わかりやすい回答ありがとうございます。
要するに作りが簡素であるためエラーチェックなども不十分ということですね。
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 日用品・生活雑貨 折り畳み傘で、閉まった時のサイズはコンパクトで開いたら大きく、軽量のオススメありますか? 価格は35 4 2022/05/22 11:05
- 日用品・生活雑貨 折り畳み傘で、閉まった時のサイズはコンパクトで開いたら大きく、軽量のオススメありますか? 価格は35 2 2022/05/15 01:49
- ドライブ・ストレージ cドライブの容量軽減についてです。 cドライブの容量を軽減する為にフォルダーをD:に移動をしたいので 3 2023/03/26 15:09
- ノートパソコン パソコンでmp4の動画ファイルを10個くらい(合計20GB)をフォルダに入れて、容量を軽くしてしまお 2 2023/02/06 02:08
- iPhone(アイフォーン) PITAKA のMagEZ Gripというスマホリングを買えるショッピングサイトを教えて下さい。 ス 1 2023/02/07 20:29
- バッテリー・充電器・電池 ポータブル電源のジャクリ2000Pro を下記のバッテリーのシガーソケットで充電すると、何時間でモバ 3 2023/01/26 18:56
- 国産車 レシプロエンジンが進化しすぎと世界的なEVへの転換も加わるとロータリーエンジンの新型車はもう出ないで 4 2022/09/02 01:05
- エアガン・モデルガン AR-556 と SAINT 5.56 は、重量を比較したら どっちの方がより軽量なのか? 1 2022/08/31 20:54
- 格闘技 近年、階級別の競技で体重超過が話題になりますが、 あれってそもそもが不思議ですよね。 試合開始直前に 2 2023/07/02 22:08
- その他(自転車) e-bikeの重量について 2 2023/08/24 21:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列を使わずに、変数名を動的...
-
C言語 配列の長さの上限
-
C言語初心者 構造体 課題について
-
複数の選択範囲の行番号を個別...
-
C言語初心者 ポインタについて...
-
unsigned char配列への入力の仕方
-
入力関数(配列4個)を作成するプ...
-
配列で格納したものをmsgboxで...
-
ExcelVBAで質問です。離れた二...
-
配列の参照渡しで型が一致しま...
-
配列をEraseしてもメモリが開放...
-
C言語で特定列だけを抽出して配...
-
VBで動的なメモリの確保
-
スマホの数字キーをISOの配置に...
-
【速いブラインドタッチ】手を...
-
char型の配列 char buff[20] = ...
-
int型をchar型に(右詰で)代入...
-
パイソンの
-
先頭アドレスとは何ですか?
-
c++によるジャンケンプログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列の参照渡しで型が一致しま...
-
配列を使わずに、変数名を動的...
-
VBで構造体の配列を関数に渡す...
-
配列で格納したものをmsgboxで...
-
unsigned char配列への入力の仕方
-
C# Listを使わずに2次元配列の...
-
C# 配列の変数宣言について。
-
擬似コード 長さがmの配列でな...
-
【速いブラインドタッチ】手を...
-
パイソンの
-
C言語初心者 ポインタについて...
-
ExcelVBAで質問です。離れた二...
-
配列を含む構造体の初期値について
-
複数の選択範囲の行番号を個別...
-
Functionの戻り値を2次元配列...
-
C++ vectorに配列をプッシュしたい
-
先頭アドレスとは何ですか?
-
テキストファイルから文字列を...
-
Redimした動的配列はEraseする...
おすすめ情報