web-dev-qa-db-ja.com

C / C ++:iso646.hの論理演算子マクロを使用するのは誰ですか?

iso646.h でC/C++論理演算子の代替スペルを使用するメリットを使用することについて、いくつかの議論が行われています。

and        &&
and_eq     &=
bitand     &
bitor      |
compl      ~
not        !
not_eq     !=
or         ||
or_eq      |=
xor        ^
xor_eq     ^=

Wikipedia によると、これらのマクロは、国際キーボード(米国英語以外)および非QWERTYキーボードでの論理演算子の入力を容易にします。私たちの開発チームはすべて米国フロリダ州オーランドの同じオフィスにいます。私が見たことから、私たちは全員米国英語を使用していますQWERTYキーボードレイアウト; Dvorak 必要なすべての文字を提供します。

iso646.hマクロはCおよびC++標準の一部であるため、マクロを使用することを支持している人は、マクロを使用する必要があると主張しています。 digraphs and trigraphs もこれらの標準の一部であり、多くのコンパイラではデフォルトでサポートされていないため、この議論は議論の余地があると思います。

私たちのチームでこれらのマクロに反対する私の理論的根拠は、以下の理由でそれらを必要としないことです:

  • 私たちのチームの全員が米国英語を使用していますQWERTYキーボードレイアウト;
  • 米国のCおよびC++プログラミングブック かろうじてiso646.h と記載します。そして
  • 新しい開発者はiso646.hに慣れていない可能性があります(これは、米国からの場合に予想されます)。

/ rant

最後に、私の一連の質問:

  • このサイトの誰かがiso646.h論理演算子マクロを使用していますか?どうして?
  • 米国英語QWERTYキーボードで記述および保守されているコードでiso646.h論理演算子マクロを使用することについてどう思いますか?
  • 私のdigraphとtrigraphは、iso646.hを米国英語で使用することに対する有効な引数ですか?QWERTYキーボードレイアウトですか?

編集:

StackOverflowで2つの同様の質問を逃しました:

5
Jaime Soto

私がすぐに気付くのは、andbitand&&&よりもずっとずっと簡単に維持できることです。 orペアについても同様です。これを使用することで、コードベース内の愚かで、注意を払わないバグの数が減ります。

7
Mason Wheeler

C++コンパイラの作業を開始したときに、「and」、「or」などのサポートを追加しました。ただし、実際に使用される機能や、追加する前に顧客やユーザーが見逃していた機能ではありません。

個人的には、「and」および「or」演算子が好きです。Pythonでもコードを記述しているからです。また、この形式の演算子を、読みやすいという理由で設計および実装したスクリプト言語で追加しました(ただし、my個人の好みでした)。

6
grrussel

g++を使用してコンパイルしているときはしばらく使用していましたが、ある時点でMSVCを実行したところ、このヘッダーがデフォルトで含まれていないため、機能しませんでした。

私はフランスに住んでいて、QWERTYキーボードを持っています。これらのマクロは非常に便利であると認めますが、「[] {}() 」.

特に!||および&&演算子の場合、コードがはるかに読みやすくなると思います。

2
jokoon

私にとっては、まったく使えません。それは学ぶべき新しい言語であり、andが本当に何を意味するかについて考える必要があるのは、それが&または&&?当初からこの方法であれば問題はありませんが、今のところ、これは大きな一歩と考えています。

または多分追加

#define begin {
#define end }

パスカルに切り替えることができます。 iso646.hはプログラミングに敵意のないキーボードの問題を軽減するかもしれませんが、それらを解決することはほとんどできません。適切なキーボードがないため、および必要なキーを適切に定義できないためにソースコードを変更することは悪いことです。過度に冗長なスタイルは、言語を正しく知らない初心者がプログラムを読みやすくする場合があります。しかし、上級のプログラマーにとっては、プログラムが単語、単語、単語の長いシーケンスになり、演算子が変数のように見えるため、読みにくくなります。極端に撮影:

a times x plus b times y plus c times z

そして

a*x + b*y + c*z

何が良いですか?

2
maaartinus