2012-05-16 9 views
8

演算子(比較演算子など)をCでオーバーロードすることはできますか?Cで演算子をオーバーロードすることはできますか?

もしそうなら、あなたはどうやってそれをしますか?私はすばやい検索をしましたが、私が見つけたのはC++のためのものでした.Cのために私が望むのはCです。

誰でもアイデアはありますか?

Edit1:アイデアは:私は構造体を持っており、(構造体のメンバに基づいて)比較を行う必要があります。このために、私は新しい "データタイプ"と比較して演算子を関連づけたいと思います。

Edit2:演算子のオーバーロードを使用せずに行うことができることを完全に認識していますが、これをオーバーロードで実行できるかどうかは疑問でした。

回答:オーバーロードの概念は、オブジェクト指向プログラミングに関連しています。 Cはオブジェクト指向ではないため、オーバーロードの概念を含むことはできません。 。。(:過負荷により、ユーザー定義演算子のオーバーロードを意味

+1

私はむしろCでこれをやりたいと思う:struct A; _Bool A_compare(const構造体* A、const構造体*); – xis

+0

私は知っています。可能であれば、演算子を使用したいと思います。 – Richard

+0

演算子のオーバーロードが必要な場合は、C++に移動する必要があります –

答えて

18

いいえ、それは不可能であるCは、演算子のオーバーロードをサポートしていません

+0

このように、演算子は特定の種類の関数ではないと考えていますか? – Richard

+2

Cのオーバーロード機能はどういう意味ですか? Cは関数のオーバーロードをサポートしていません。 – xis

+1

@ xis19いいえ、それは私の間違いではありません。 Richard:C++では、演算子は関数に非常によく似ています。オーバーロードされた演算子を定義することは、関数を定義するのとまったく同じ方法で行われます。 – meagar

5

場合、答えはノーですのような事前に定義された演算子が、いくつか。 *など+は算術型のため(それについて考える場合)オーバーロードされています。それはまた、デ参照ポインタのための過負荷を持っているので、*は特別である。

+0

複数*と逆参照*が異なります。私は彼らが過負荷ではないと思う。 – xis

+3

'*'は本当に特別なものではありません。 2つの別々の演算子、1つのバイナリ、もう1つの単項演算子が同じ名前であります。たとえば、 '&'と同じことが起こります。どちらの場合も、単項演算子と二項演算子は無関係です。 –

+0

はい、それらは異なっています。だから私は '*'は特別で過負荷ではないと言ったのです。 – dirkgently

3

Cは、オペレータまたは機能のオーバーロードをサポートしていません。再定義する方法はありません<<=、構造体の型を直接比較するには、、>===、または!=を使用します。

関連する問題