1. ホーム
  2. c

[解決済み] C言語は強い型付けか?

2023-03-04 09:14:03

質問

引用 ウィキペディア :

<ブロッククオート

よく使われる2つの言語 多くの種類の暗黙の変換をサポートする CとC++があり、これらは暗黙的な変換をサポートしています。 これらは弱型化言語であると主張されることがある。 弱型化言語であると主張されることがある。しかし これらの言語が弱型言語であると主張する人もいる。 型が異なるオペランドをどのように 異なる型のオペランドを 両者は強い型付け言語と見なすべきであると を強く型付けされた言語と見なすべきだという意見もある。

もっと明確な答えはないのでしょうか?

どのように解決するのですか?

Strongly typedとweakly typedは、技術的に広く合意された意味を持たない用語です。 明確に定義された意味を持つ用語は次のとおりです。

  • 動的型付け は、型が実行時に値に付加されることを意味し、異なる型の値を混ぜようとすると "実行時型エラー"を引き起こす可能性があります。 例えば、Schemeでtrueに1を足すために (+ 1 #t) と書くとエラーになります。 このエラーは、問題のあるコードを実行しようとした場合にのみ発生します。

  • 静的型付け とは、コンパイル時に型がチェックされ、静的な型を持っていないプログラムはコンパイラに拒否されることを意味します。 例えば、MLでtrueに1を加えようとする場合、次のように書きます。 1 + true と書いて,trueに1を加えようとすると,(おそらく不可解な)エ ラーメッセージが表示されて,プログラムが拒否されます. たとえそのコードが実行されることがなくても,エラーは必ず出ます.

柔軟性をどれだけ重視するか、実行時エラーをどれだけ心配するかによって、人によって好むシステムが異なります。

時々、"strongly typed"が静的に型付けされたものという意味で緩く使われ、"weakly typed"が動的に型付けされたという意味で間違って使われることがあります。 強く型付けされた(strongly typed)」という用語は、「型付けシステムを回避したり破壊したりすることはできない」という意味で、「弱く型付けされた(weakly typed)」という用語は、「型付けシステムに抜け穴があった(work out there in the type system")」という意味で使われるとよいでしょう。 逆に言えば、静的な型システムを持つほとんどの言語には抜け穴があり、動的な型システムを持つ多くの言語には抜け穴がないということです。

これらの用語はどれも、言語で利用可能な暗黙の変換の数とは一切関係がありません。

プログラミング言語について正確に話したいのであれば、" strongly typed" と " weakly typed" という用語は避けたほうがよいでしょう。 C言語は静的型付けされた言語ですが、抜け道がたくさんある言語だと言えるでしょう。 抜け穴の1つは、どんなポインタ型も他のポインタ型に自由にキャストできることです。 また、2つのメンバを持つCのユニオンを宣言することで、好きな2つの型の間に抜け穴を作ることができます。

静的型付けと動的型付けについて詳しくは なぜ解釈されるラングはほとんどducktypedであり、コンパイルされたものはstrong-typingであるのか? .