Indent Stylesに関するWikipediaの記事を読みましたが、まだ理解できません。K&Rと1TBSの違いは何ですか?
Indent Stylesに関するWikipediaの記事を読みましたが、まだ理解できません。K&Rと1TBSの違いは何ですか?
回答:
K&Rと一つの真のブレーススタイル(1TBS)との最大の違いは1TBSで、すべてがということでif
、else
、while
、とfor
彼らは必要ない場合であっても、文が開閉括弧を持っています。目的は、新しいステートメントを簡単に挿入し、それらがどのようにグループ化されるかを正確に知ることです。
例として:
K&R:
int i;
for (i = 0; i < 10; i++)
printf("Hi.");
1TBS:
int i;
for (i = 0; i < 10; i++) {
printf("Hi");
}
K&Rは次のようなものです。
if (x)
a();
else {
b();
c();
}
つまり、ブレースは必要な場所でのみ使用され、制御ステートメントと同じ行でブレースを開き、独自の行でブレースを閉じます。
「1つの真のブレーススタイル」(1TBSまたはOTBS)は、中括弧で囲むことにより、単一の制御ステートメントを複合ステートメントに変換します。
if (x) {
a();
} else {
b();
c();
}
Allmanスタイルは1TBSよりも少し進んでおり、オープニングブレースを単独で線上に配置することにより、垂直方向の間隔を強制します。
if (x)
{
a();
}
else
{
b();
c();
}
編集:
「デニスリッチーは、優れた言語を発明しただけでなく、それに対して非常に優れたブレーススタイルを考え出した非常に賢い人でした」と言うために、それが「ar慢」とみなされる方法を正確に把握しようとしています。
とにかく慢であると主張する人のために、ここに少し挑戦があります:Sourceforge、Github(など)に行き、K&Rブレーススタイルを使用してプロジェクトを選択します。バグとコミットの記録を調べ、使用したブレーススタイルによって引き起こされた単一のバグを見つけようとします。
それほど多くの作業を行いたくない場合は、簡単な統計分析を行ってみてください。さまざまなブレーススタイルを使用してプロジェクトを比較し、ブレーススタイルと相関するバグカウント(重大度など)の統計的に有意な違いである「バイモーダル」を表示できるかどうかを確認します。
数年前にこれらの両方を実行しましたが、ブレーススタイルに起因する単一のバグを見つけることも、2つの間の統計的に有意な相関に近づくものを見つけることもできませんでした。平均して、K&Rブレーシングを使用したものは、わずかに少ないのバグがあったが、違いました多くの統計学的に有意としての資格には小さすぎます。
提起されたので、複数ステートメントマクロの状況についてコメントします。複数のステートメントを含むが、それらを中括弧で囲まないマクロにはバグがあります。私の仕事は、そのバグをカバーするコードを書くことではありません。それどころか、私の仕事はそのバグをできるだけ早く見つけて根絶することです。
バグを隠してバグを診断および修正されないままにすることを期待してコードを書くのは、実に悪です。あなたが望むなら、その慢さを呼びなさい、しかし私はこれを交渉に近いものとさえ見ない。バグを見つけて修正する必要があります。存在する期間が長いほど、修正するのがはるかに困難で費用がかかる可能性が高くなります。
問題は、一般的にKRブレーススタイルにあり、コードのリファクタリングにあります。コードを移動するとき、何かの周りにブレースがないことを簡単に見落とし、それを誤って移動し(または条件付きで実行されていると考えてその下に何かを移動し)、何かが機能しなくなったときに頭を傷つけるか、不幸にしてコード領域は十分にテストされておらず、バグは悪用される方法が見つかるまで気付かれません。デバッガーに簡単にアクセスすると、気づいた場合は簡単に問題を見つけることができますが、気付かない場合は...