■1.サンプルコード コピペしコンパイル&実行し動作確認してください。 ■2.昔風の書き方でバグのあるサンプルコード このソースコードはバグっているので真似しないでください。力試しに正しく動くように直してみましょ… 続きを読む 【C言語サンプル】
配列の中から 最大値と最小値を見つける
カテゴリー: clang12 -Wall -Wextra(通常解析)
【C言語サンプル】
【C言語】
論理否定演算子!の
よくある間違い
if(!x==0){if(!x & y);}
warning: logical not is only applied to the left hand side of this comparison 警告:!の結合力は==よりも強い[-Wlogical-not-p… 続きを読む 【C言語】
論理否定演算子!の
よくある間違い
if(!x==0){if(!x & y);}
【C言語】
sizeof演算子は関数ではない
strlen()でもない
■1.sizeof演算子は関数ではない sizeof演算子を関数だと思っている人は結構多く、この人達は【sizeofの戻り値】って書くのだけれど、1+1の戻り値って言わないですよね。 聖典プログラミング言語C A7.4.… 続きを読む 【C言語】
sizeof演算子は関数ではない
strlen()でもない
【C言語】
初期化されていない自動変数
(ローカル変数)の値はゴミ
warning: ‘ptr’ is used uninitialized 警告:未初期化変数を使用した[-Wuninitialized] ■1.初期化されていない自動変数の問題例 初期化していない自動変数の値はゴミです。… 続きを読む 【C言語】
初期化されていない自動変数
(ローカル変数)の値はゴミ
【C言語】
二重解放(double free)対策の
よくある間違い
warning: double-‘free’ of ‘p’ [CWE-415] 警告:二重解放 [-Wanalyzer-double-free] ■1.二重解放のバグ例 二重解放はメモリが破壊され大きな問題になります。 … 続きを読む 【C言語】
二重解放(double free)対策の
よくある間違い
【C言語サンプル】
シーザー暗号 (ctype.hの使い方)
■1.シーザー暗号ソース全文 ■2.遊び方 $./a.out /usr/include/stdio.h↓暗号化したいファイル名を指定します。暗号化したファイル”encrypt.txt”と、復号化し… 続きを読む 【C言語サンプル】
シーザー暗号 (ctype.hの使い方)
【C言語サンプル】
10進数を2進数に 2進数を10進数に変換
■十進数値を二進文字列変換 intは32bitを前提としています。 ■二進文字列を十進数値に変換 ■使用例と検算 ■コード全部
【C言語サンプル】
qsort関数の使い方 整数配列、ポインタ配列、構造体配列の並べ替え
■4つの準備 qsortを使うには以下の4つを準備してください。(1)ソート対象の配列(2)配列要素数(3)配列一つのサイズ(4)比較関数 ■整数配列をqsort n1 – n2の引き算の結果で数値順にソート… 続きを読む 【C言語サンプル】
qsort関数の使い方 整数配列、ポインタ配列、構造体配列の並べ替え
【C言語サンプル】
素数の求め方
(剰余演算子%の使い方)
2は偶数だけれど素数 2は偶数だけれど素数なので2の偶数判定をループの外に出すと若干高速になります。
【C言語】2022年版
浮動小数点で float型はやめなさい float型対double型
■1.float型対double型 ●2003年初版のCプログラミング診断室で紹介されている「float型はやめなさい」をgcc11版で試してみた。●2022年現在でも「float型はやめなさい」だった。処理時間でも精度… 続きを読む 【C言語】2022年版
浮動小数点で float型はやめなさい float型対double型
【C言語】
for文とwhile文の使い分け
(1行vs4行)
■whileで記述すると4行も必要 while文は(1)変数宣言、(2)初期化式、(3)ループ条件、(4)更新式で4行も必要です。 ■for文なら1行で書けるので楽 変数宣言、初期化式、ループ条件、更新式が1行で書けます… 続きを読む 【C言語】
for文とwhile文の使い分け
(1行vs4行)
【C言語サンプル】
数字(1)を英語表記の月(January)に変換する方法
■数字の1を英語表記の月Januaryに変換する ■0月を捨てると 月名配列[mon-1]等の-1が不要になります。 ■C99式の指示付きの初期化子を使うと 「間違ってずれて初期化」する危険が減ります。
【C言語サンプル】
大文字小文字変換 (isupperとtolowerの使い方)
■標準ヘッダを使った例(推奨) ctype.hで定義されている標準関数を使うとコードが読みやすくなります。 変換対象が/usr/include/stdio.hのようにアスキーコードだけで記述されている場合このコードで動き… 続きを読む 【C言語サンプル】
大文字小文字変換 (isupperとtolowerの使い方)
【C言語サンプル】
閏年(うるう年)判定プログラム
warning: suggest parentheses around ‘&&’ within ‘||’ 警告:X&&Y||Zは(X&&Y)||Zと丸括弧を付けて[-Wpa… 続きを読む 【C言語サンプル】
閏年(うるう年)判定プログラム
【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言語】
簡潔な式を書く時
三項演算子?:は便利
warning: operator ‘?:’ has lower precedence than ‘|’; ‘|’ will be evaluate… 続きを読む 【C言語】
簡潔な式を書く時
三項演算子?:は便利
【C言語】
memcmp(buf,”abc”,3 == 0)
閉じカッコの位置が違う
warning: size argument in ‘memcmp’ call is a comparison memcmpの第三引数が比較式[-Wmemsize-comparison] ■ 誤っ… 続きを読む 【C言語】
memcmp(buf,”abc”,3 == 0)
閉じカッコの位置が違う
【C言語】
論理演算子||に定数を使った!
if(x == ‘a’ || ‘A’){
warning: use of logical ‘||’ with constant operand 警告:論理演算子||に定数を使った[-Wconstant-logical-operand] ■… 続きを読む 【C言語】
論理演算子||に定数を使った!
if(x == ‘a’ || ‘A’){
【C言語】
静的解析 対 動的解析
gcc -fanalyzer VS gcc -fsanitize
■1.-fanalyzer と -fsanitize gcc -Wall -Wextra -fanalyzer(静的解析) gcc -fsanitize=address(動的解析) ■2.動的解析で検出できる問題例 配列… 続きを読む 【C言語】
静的解析 対 動的解析
gcc -fanalyzer VS gcc -fsanitize
【C言語】NULLは
【ヌル】ではなく
【ヌルポインタ】と発音しよう
warning: initialization of ‘char’ from ‘void *’ makes integer from pointer without a cast 警告: ‘void *’ で ‘char… 続きを読む 【C言語】NULLは
【ヌル】ではなく
【ヌルポインタ】と発音しよう
【C言語】
未定義動作はコンパイラが出鱈目な動きをしてもプログラマは文句を言えない
warning: operation on ‘x’ may be undefined 警告: ‘x’ に対する演算は未定義動作の可能性があります。[-Wsequence-point] ■1.未定義… 続きを読む 【C言語】
未定義動作はコンパイラが出鱈目な動きをしてもプログラマは文句を言えない
【C言語】
enumは
符号付き(signed)か?
符号無し(unsigned)か?
warning: result of comparison of unsigned enum expression < 0 is always false 警告:unsigned enum 式 < 0 の比較… 続きを読む 【C言語】
enumは
符号付き(signed)か?
符号無し(unsigned)か?