【C言語】
free(ptr)しても
ptrはNULLにならない

■何と表示されますか? freeしたらfree関数がポインタをNULLにしてくれると思っている人!残念ですが間違っています。 参考: CFAQ-4.8: 呼んだ側のポインターの値は変わらなかった。

投稿日:
カテゴリー: 未分類

【C言語】 static関数のプロトタイプ宣言を書くのが面倒臭いと思うのが正しい

■static関数のプロトタイプ宣言を書くのが面倒くさい 業務で、「ソースコードを上から下へ読めるようにmain()関数を上に書く」とルール化して、static関数のプロトタイプ宣言を何百行もコメント付きで記述するプロジ… 続きを読む 【C言語】 static関数のプロトタイプ宣言を書くのが面倒臭いと思うのが正しい

【C言語】enum では最初の定数は非ゼロにするか、あるいはエラーを示すものにする

■デバッグを楽にする小技 上記のプログラムでenumの先頭でSun=1の設定をしていないと、初期化していない xを引数にしてnum2Week(x)を呼んだ場合”日曜日”が表示され(る事が多く)問題検出が困難となる。 参考… 続きを読む 【C言語】enum では最初の定数は非ゼロにするか、あるいはエラーを示すものにする

投稿日:
カテゴリー: 未分類 タグ:

【C言語】マルチステートメントの勧め

■シングルステートメント ■マルチステートメント(推奨) 表のように書ける時は、ぱっと見ただけで瞬間的に理解できるのでマルチステートメントがお勧めです。 参考: プログラム言語 C の推奨されるスタイルとコーディング規範… 続きを読む 【C言語】マルチステートメントの勧め

【C言語】
コーディング規約で
思考が止まる
ブラックルールとは?

■嫌いなブラックルール ・char/short/int/long を直接記述する事禁止する・数値を直接記述すること禁止、必ずマクロにする事・変数の宣言は関数の先頭でまとめて行い別の行で全てゼロで一律もれなく初期化する事・… 続きを読む 【C言語】
コーディング規約で
思考が止まる
ブラックルールとは?

【C言語】
今時(C99仕様)の変数宣言と
時代遅れのとりあえず0で初期化

■時代遅れの変数宣言と初期化(非推奨) (1)変数宣言(2)とりあえず0で初期化(3)本当の値設定の3部構成からなるC89仕様時代のよくあるスタイルです。 14行目でyの初期化が漏れているので未初期化の警告が出ます。20… 続きを読む 【C言語】
今時(C99仕様)の変数宣言と
時代遅れのとりあえず0で初期化

【C言語】
自作のstrlen/strncpy/strncmpは標準関数の5~6倍遅かった

■1.パチモノ自作関数を実務で作ってはいけない と別の投稿でも書きましたが どのくらい処理速度が違うのかmem系関数に続いてsrc系関数を自作関数と標準関数で比較してみました。 ■2.自作関数vs標準関数 やっている事は… 続きを読む 【C言語】
自作のstrlen/strncpy/strncmpは標準関数の5~6倍遅かった

【C言語】
sscanf関数の正規表現で
csvファイルを解析し
郵便番号から住所を表示

■このコードで学習できること ・scanfの正規表現・コメントの書き方 ■郵便番号⇒住所プログラム コピペしてコンパイル&実行してみて下さい。 ■製造年と作者名をコメントで明示すると高品質になる 経験則ですが、ファイルヘ… 続きを読む 【C言語】
sscanf関数の正規表現で
csvファイルを解析し
郵便番号から住所を表示

投稿日:
カテゴリー: 未分類 タグ:

【C言語】
キャッシュの有無で
二次元配列参照の処理速度は
物凄く違う

■1.要するに安近短が百倍早いらしい for(x;for(yとfor(y;for(xの処理速度を比較してみました。 ■2.for(x;for(y対for(y;for(x やっている事はどちらも2次元配列を文字’Q&#82… 続きを読む 【C言語】
キャッシュの有無で
二次元配列参照の処理速度は
物凄く違う

【C言語】
自作のmemset/memcpy/memcmpは標準関数の20倍遅かった

■1.パチモノ自作関数を実務で作ってはいけない と別の投稿でも書きましたがどのくらい処理速度が違うのか自作関数と標準関数を比較してみました。 ■2.自作関数vs標準関数 やっている事はコピー元の自動変数配列を文字Qで埋め… 続きを読む 【C言語】
自作のmemset/memcpy/memcmpは標準関数の20倍遅かった

【C言語サンプル】
構造体ポインタの使い方

■単純な構造体メンバの参照 ■間接演算子 * と構造体ポインタ 読みにくいのでこのスタイルは通常使用されません。 ■アロー演算子 -> と構造体ポインタ 「構造体ポインタの指す先のメンバ」と自然に読めるので通常このスタイ… 続きを読む 【C言語サンプル】
構造体ポインタの使い方

【C言語】
Shift_JISで書いたプログラムをgcc/clangでコンパイルしてはいけない

■1.gccでエラーにならないので困る このプログラムがShift_JISで書かれている場合、いわゆる5C問題で全部コメントになります。 gccで何のエラーもなくコンパイルできますが何もしないプログラムとなります。 エラ… 続きを読む 【C言語】
Shift_JISで書いたプログラムをgcc/clangでコンパイルしてはいけない

【C言語】
printf(“%zu\n”,strlen(“全角”)); 全角は2バイト固定か?

■1.次のプログラムは何と表示されますか? ■2.ソースコードがEUCの場合 プログラマの期待した結果になります。 ■3.ソースコードがShift_JISの場合 プログラマの期待した結果にこの例ではなりましたが、 gcc… 続きを読む 【C言語】
printf(“%zu\n”,strlen(“全角”)); 全角は2バイト固定か?

【C言語】
早期リターンvs関数出口1つ

■1.早期リターンは読みやすい(推奨) コーディング規約 「関数の出口1つだけ」を強要するプロジェクトは多いです。 しかしこのルールを守った読みやすいコードを見たことがありません。 規約を強要する人は是非ともリーダブルコ… 続きを読む 【C言語】
早期リターンvs関数出口1つ

【C言語サンプル】
rand乱数生成関数の使い方
(じゃんけんゲーム)

■乱数の種まき ●srand関数による乱数の種まきをしないと何回実行しても同じ結果となる●実務ではrand関数よりrandom関数を使う ■乱数を生成するrand関数の使い方 srand関数を使用して乱数の種を蒔かないと… 続きを読む 【C言語サンプル】
rand乱数生成関数の使い方
(じゃんけんゲーム)

【C言語】
長い文字列は複数行に分けて書いてOK!円記号¥も不要

■長い文字列(寿限無) ■短い文字列を連結して長い文字列を作る ■予期せぬ文字列リテラルの連結(例1) C言語では連続する文字列リテラルは連結されます。つまり”文字列A” ”文字列B”は”文字列A… 続きを読む 【C言語】
長い文字列は複数行に分けて書いてOK!円記号¥も不要

【C言語】
文字列配列の要素数を指定すると終端文字’¥0’が入らず暴走する時がある

■1.暴走するstrlen ■2.暴走するprintf ■3.暴走するstrcmp ■4.暴走するstrcpy これらのプログラムが何と表示するかは動かしてみないと誰にもわかりません異常終了するかもしれません。 配列 a… 続きを読む 【C言語】
文字列配列の要素数を指定すると終端文字’¥0’が入らず暴走する時がある