質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

意見交換

クローズ

10回答

1814閲覧

プログラミングのエラーの具体例

40947068

総合スコア2

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2024/01/16 13:59

編集2024/01/16 14:20

0

1

プログラミングのエラーについて

プログラミングでコードを実行したときに起きたエラーを教えてください。どんな問題でもいいのでできるだけ多くのエラーが知りたいです。
例えば配列の存在しないインデックスを参照してしまったとか無限ループにはまってしまったなど、どんなに簡単なものでも教えていただけると嬉しいです。

言語のコンパイラおよび実行環境を作成しようと思うのですが、追加機能として思いついたのは実行時エラーを分かりやすくするための工夫を入れたいと思っています。どのように実装するかはまだ考え中ですができるだけ多くのエラーについて知りその中で工夫できるようなものがあればと思っています。また、自作言語ですので大規模な開発というよりも小規模なプログラミングを想定しています。
なのでプログラミングを学習している途中の方がはまるような実行時に起きるエラーなどを教えてほしいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答10

#1

meg_

総合スコア10579

投稿2024/01/16 14:13

プログラミングでコードを実行したときに起きたエラーを教えてください。どんな問題でもいいのでできるだけ多くのエラーが知りたいです。

・知りたい理由を教えてください。集めて何かのデータとして使用されるのでしょうか?
・「具体例」とはどの程度の具体性でしょうか?

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

40947068

総合スコア2

投稿2024/01/16 14:22

回答ありがとうございます。質問修正いたしました。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#3

kyamad9

総合スコア11

投稿2024/01/16 14:59

編集2024/01/16 15:05

ちょっと話がそれるかもしれませんが、snapshot テストの話をしたいと思います

このディレクトリには shiika っという言語でどういうエラーが出るかの例がいくつか載っています
https://github.com/shiika-lang/shiika/tree/main/tests/snapshots

このディレクトリに保存されているファイル群は snapshot といいます
このファイル郡にはある時点でのプログラムの実行結果が保存されています
さきほど上げたディレクトリでは、プログラミング言語がエラーになる場合にはどのようなメッセージを表示するかも載っています

snapshot テストの詳細は省きますが、OSS レポジトリにはこのような自動テストのコードが色々存在するかと思います
なのでこれらを参照すれば多種多様なエラーを効率的に入手することができるのではないでしょうか

また、OSS の issue なども良い収集場所になるかと思いますし、stack over flow や teratail にも多種多様なエラーの例が上げられているかと思います
それらを収集するためにスクレイピングすることを検討するのも良いかもしれません
(もちろんサーバーに負荷をかけすぎないような配慮は必要ですが)

参考までに

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#4

otn

総合スコア84487

投稿2024/01/16 16:01

追加機能として思いついたのは実行時エラーを分かりやすくするための工夫を入れたいと思っています。

コンパイルエラーは除外して、実行時エラー限定と言うことですね。
コンパイルエラーを分かり易くという工夫をしている言語はありますが、実行時エラーを分かり易くは難しいと思うので、実現すれば面白いと思います。

Cであれば、添え字の範囲外アクセスや、ポインターの処理ミスなどによる、segmentation fault を分かり易くというのが嬉しいでしょう。
ただ、今の多くの言語では添え字範囲外によるsegmentation faultは起こらず、「どこそこでこの配列の添え字が範囲外のこれこれ」というエラーメッセージになるかと思いますので、ここはこれ以上は難しい。「添え字範囲外」は多くのケースで結果であってその原因となるバグ(例えば「上限の変数名を間違えている」とか「<=<が違う」とか)まで推論というとAIの世界になるので、ちょっとコンパイラ作成というジャンルを超える気がします。
また、Rubyだと、そもそも「配列の添え字が範囲外」はエラーにならないし。

あとは、メソッドの結果が期待通りでないのに、それをチェックしないままで、その返り値をそのまま使って発生する NullPointerException ないしそれに類した'NoneType' object has no attribute ~~~undefined method ~~~ for nil:NilClassも、せいぜいメッセージの文言を変えるくらいで(「メソッド~~の呼び出しがNullを返しました」的な)、これ以上はAIの世界な気がします。

バラバラと書くと、
・言語によってよく発生する実行時エラーは異なるので、どんな言語か書いた方が良い
・よくあるエラーの大元の原因を推測する方向に進むのか
・めずらしくてググってもよくわからない実行時エラーのメッセージ文言の工夫を考えるのか

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#5

jimbe

総合スコア12612

投稿2024/01/16 16:44

言語のコンパイラおよび実行環境を作成しようと思うのですが、追加機能として (ry

何が出来る言語なのかも決まっていないのでは実行時に何が起きるのかも分からないと思います。
追加機能を考えるのは、言語仕様を決めてコンパイラと実行環境を作ってからで良いのではないでしょうか。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#6

fana

総合スコア11645

投稿2024/01/17 01:34

編集2024/01/17 06:29

「エラー」という言葉が何を指すのかが漠然としすぎている印象を受けます.
例として

無限ループにはまってしまった

というのが挙げられているということは,「何かプログラマの意図していなかった挙動になっている」みたいな話を「エラー」と考えておられるように見えるのですが,だとしたら「意図していなかったかどうか」を判断する術があるのか? というのが疑問です.(そのコードを書いた本人をつれてきて問いただす以外に道はあるのか?)

無限ループを意図してコードを書いたならば当然無限ループしてくれなきゃ困るわけで… すなわち,無限ループすることが「正しい動作」なわけで,そこを誤判定されて「エラーだぞ」とか言われたら,すごくうざい気がします.
(あと,そもそも実行時に「無限ループしている(=本当にそのループから抜けることが未来永劫あり得ない)」のだと判断することも難しそうな…?)
何かしらコードを解析するなどして(コンパイル時とかに?)判定されるのだとしても,while(true){ ... } とか書いただけで毎回ぐだぐだ言われるとしたらそれもうざいだろうし…?


それはそれとして,めんどくさそうな「エラー」(というかプログラムの間違い)というのは

  • オブジェクトをいじくろうとした時点でそのオブジェクトの寿命が尽きている
  • 集合の要素についてのループ内でその集合の要素を 追加/削除 等することでループ処理がくっちゃくちゃになる
  • 例えば,画像データを画素単位で走査する処理において,走査するポインタの型が間違っている(画素データの型と不一致)
  • 一度やれば済む処理を不必要に何度も実施するようなコード
  • 本来「エラー(その処理を続行不能)」とすべきところのチェックが抜けているとか十分ではないとか
    • 似たようなので,例外の面倒を見るのを忘れている状態とか
      • 逆に,問答無用で例外を握りつぶしている奴がいて大変なことになってるとか
  • インクリメントの前置と後置を間違えている
  • 浮動小数点な型の「一致」判定

とか?

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#7

otn

総合スコア84487

投稿2024/01/17 04:28

fanaさん

なるほど。
「実行時エラー」と書いてあるので、実行時にエラーメッセージを出して停止する際のメッセージのことかと思いましたが、追記された「無限ループ」は、それとは違いますね。
「実行時にエラーで止まったりはしないけど、意図と違う動作」を検出したいとなると、まず「意図」を記述する仕組みが必要でそれを解釈してそれを参照しながら実行するという今までに無かった仕組みが要りますね。
で、書いてある「意図」がそもそも思っていたとおりに書けておらず、なんのこっちゃとなるみたいな。

質問者さんが、「実行時にエラーメッセージを出して止まったりはしないけど、意図と違う動作を検出」と思っているのかどうか、そこまで考えずに「無限ループ」と書いてしまったのか。

まあ、テスト記述でいいとすると、テスト自動化ツールで実現できていると言えますね。
「無限ループ」は、「~~分以内に停止」で検出できる。

一度やれば済む処理を不必要に何度も実施するようなコード

は無理か。

浮動小数点な型の「一致」判定

これは実行時というよりはコンパイル時に警告出すのですかね。静的型の場合ですが。
実行時に「==の際に、差の絶対値が、ゼロでなくて、値の絶対値の1万分の1以下なら警告」とかもありか。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#8

YuuT

総合スコア673

投稿2024/01/19 08:15

それぞれの言語で例外のクラス一覧がドキュメントに載っていると思いますが、そんなイメージですか?
例えばpythonなんかは以下に例外一覧があります。
https://docs.python.org/ja/3/library/exceptions.html#BaseException

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#9

sanshirou

総合スコア7

投稿2024/01/23 03:51

私はもっぱらC言語ですが、それでよければ。

・文末のセミコロン(;)の抜け。
・かっこの対応不一致。
・printf()関数で、第1引数中に"%d"や"%s"を入れておいて、第2引数の書き忘れ。
・if文、for文などで、条件式の直後にセミコロンを書いてしまうミス。
・if文、for文などで、被制御文を複文にしたいのに、中括弧{}を書き忘れる。
・switch文中でのbreak文の抜け。
・scanf()関数で、第2引数での&の抜け。
・必要なヘッダファイルのインクルード忘れ。
(例)数学関数を使うときのmath.hのインクルードの抜け、など。
・\0と\nの取り違え。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#10

marie_222

総合スコア5

投稿2024/01/25 11:29

動的型付けなら、引数や被演算子に想定外の型の値が来たときとか?

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問