■static関数のプロトタイプ宣言を書くのが面倒くさい 業務で、「ソースコードを上から下へ読めるようにmain()関数を上に書く」とルール化して、static関数のプロトタイプ宣言を何百行もコメント付きで記述するプロジ… 続きを読む 【C言語】 static関数のプロトタイプ宣言を書くのが面倒臭いと思うのが正しい
タグ: スタイル
【C言語】
深いネストは理解しにくいので条件をひっくり返して早く返るとネストが浅くなる
■深いネストは理解しにくい ■条件をひっくり返して早く返るとネストが浅くなる ネストが浅くなりコードが単純になります。 ■まとめ(コンパイル可能な検算)
【C言語】マルチステートメントの勧め
■シングルステートメント ■マルチステートメント(推奨) 表のように書ける時は、ぱっと見ただけで瞬間的に理解できるのでマルチステートメントがお勧めです。 参考: プログラム言語 C の推奨されるスタイルとコーディング規範… 続きを読む 【C言語】マルチステートメントの勧め
【C言語】
strstr関数を使ってコードの不吉な臭いを見つける
■駄目語(grep -f NGワード相当) 駄目語録[]の単語は開発環境で異なります。ご自身の環境に応じて追加削除してください。
【C言語】
mallocにキャストは
今時のCコンパイラでは必要ない
error C2440: ‘初期化中’: ‘void *’ から ‘char *’ に変換できません。 警告:C言語なのにC++コンパイラ使ってる?… 続きを読む 【C言語】
mallocにキャストは
今時のCコンパイラでは必要ない
【C言語】
コーディング規約で
思考が止まる
ブラックルールとは?
■嫌いなブラックルール ・char/short/int/long を直接記述する事禁止する・数値を直接記述すること禁止、必ずマクロにする事・変数の宣言は関数の先頭でまとめて行い別の行で全てゼロで一律もれなく初期化する事・… 続きを読む 【C言語】
コーディング規約で
思考が止まる
ブラックルールとは?
【C言語】
char *argv[]は
2次元配列と違う
■char *argv[]サンプルコード ■2次元配列サンプルコード ■argvと2次元配列の違い このプログラムの場合 (1) 2次元配列は末尾に番兵のNULLポインタを置けない。(2) 2次元配列は行 x 列のメモリ… 続きを読む 【C言語】
char *argv[]は
2次元配列と違う
【C言語】
ヨーダ記法は
昭和のウサギ跳びと同じ臭い
今は-Werrorオプションで
if(x=0)のバグを防ごう
warning: suggest parentheses around assignment used as truth value 警告:真偽値として使用するなら代入式にカッコつける[-Wparentheses] ■… 続きを読む 【C言語】
ヨーダ記法は
昭和のウサギ跳びと同じ臭い
今は-Werrorオプションで
if(x=0)のバグを防ごう
【C言語】
NULLにキャストするな!
不要なキャストを削除しよう
warning: cast from pointer to integer of different size 警告:ポインタ型を型幅の違う整数型にキャストした[-Wpointer-to-int-cast] ■memse… 続きを読む 【C言語】
NULLにキャストするな!
不要なキャストを削除しよう
【C言語】
switch文の中でreturn直後にbreakは必要か?
■1.何をしてるか1秒でわかるコードに caseがbreak で終わっていないので下記2大コーディングルールに違反します。 MISRA-C:2012 R16.3 違反CERT-C MSC17-C. 違反 ※CERT-C … 続きを読む 【C言語】
switch文の中でreturn直後にbreakは必要か?
【C言語】
関数名や変数名に漢字を使うとものすごくわかりやすい
■1.変数名や関数名に漢字を使用した例 2022年令和4年現在gcc11,clangでコンパイル可能です!3秒もあれば処理内容が理解できるのでは? ■2.deepLで訳して書き直してみた DeepL翻訳サイトで訳してもら… 続きを読む 【C言語】
関数名や変数名に漢字を使うとものすごくわかりやすい
【C言語】
無限ループの書き方
while(1)を避け
for(;;)を使う
■1.無限ループwhile(1)には亜種が多い(非推奨) while(1)から派生した色々な書き方があります。for(;;)の派生は、せいぜいセミコロンの空白くらいです。 ■2.while(1)に文句を言うツール対策(非… 続きを読む 【C言語】
無限ループの書き方
while(1)を避け
for(;;)を使う
【C言語】
不要なelseを削除しよう!
(No-else-return)
warning: do not use ‘else’ after ‘return’ 警告:return直後のelseは要らない[readability-else-after… 続きを読む 【C言語】
不要なelseを削除しよう!
(No-else-return)
【C言語】
if文のセミコロンが多すぎても
コンパイルエラーにならない
warning: suggest braces around empty body in an ‘if’ statement 警告:if文の中の空のボディを波括弧で囲むことを推奨します。[-Wempty-body] ■1… 続きを読む 【C言語】
if文のセミコロンが多すぎても
コンパイルエラーにならない
【C言語サンプル】
今時の Hello world!
(C89/90を捨てC99へ移行)
c99仕様のC言語ではmain 末尾の return 0 は書かなくてもOK! C89仕様のC言語:30年以上前の古い仕様 gcc hello.c -Wall -std=c89 でコンパイルするとgccにmain のre… 続きを読む 【C言語サンプル】
今時の Hello world!
(C89/90を捨てC99へ移行)
【C言語未使用変数】
2行増やすな1行削れ
(unused variable)
warning: unused variable ‘yagni’ 警告:未使用変数 ‘yagni’ [-Wunused-variable] ■1.この行を削ろう /* 削除開始 */ ⇦ コメントを追加しないで// 削除… 続きを読む 【C言語未使用変数】
2行増やすな1行削れ
(unused variable)
【C言語】
ちゅうぶらりんのelse
(dangling-else)
warning: this ‘if’ clause does not guard… 警告:誤解を招く段落を避け{ }を付けよう[-Wmisleading-indentation] ■1.紛らわしい段落 {}カッコが無いの… 続きを読む 【C言語】
ちゅうぶらりんのelse
(dangling-else)
【C言語】
局所変数のループカウンタにloop_counterと長い名前を付けるのは止めよう
■1.長い名前は本当に分かりやすいですか? ↑↓これは間違いだ! 【保守の事を考えると”変数名”に意味のない名前を与えると後でわからなくなる。多少面倒でも後で見て何を意味している変数なのかわかるよ… 続きを読む 【C言語】
局所変数のループカウンタにloop_counterと長い名前を付けるのは止めよう