Cygwinでデバッグ/不可解な動作
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[Cygwinでデバッグ]]
#contents
** 不可解な動作 [#se83500f]
コンパイルエラーも出ないし、実行させてもエラーは出ないけ...
*** 警告レベルを上げる [#m8730d3e]
gcc コンパイラには、オプションによって動作を切り替える指...
gcc -Wall hoge.c
と "-Wall"(''W''arning ''all'' の意味)のオプションを付...
この "-Wall" オプションは、完成する a.exe には影響しない...
alias gcc='gcc -Wall'
Windows のエクスプローラでは、この名前のファイルを作るこ...
echo "alias gcc='gcc -Wall'" >> ~/.bash_profile
*** 警告される例 [#r17b36b6]
上記のオプションを付けておくと、次のような時に警告してく...
-
if (i = 0) { .... }
↓
hoge.c:6:2: warning: suggest parentheses around assignme...
if の条件を書くべきところで、代入 (=) を行っています。比...
> このような間違いを避けるために 0 == i と左右の項を入れ...
> ちなみに Java ではこの間違いはコンパイルエラーになりま...
//>> Java のコーディングスタイルを提案している著名な文書...
-
int val; printf("%d\n", val);
↓
hoge:4:9: warning: uninitialized variable 'val'
初期化されてない変数を使っています。ただし、この警告を出...
-
int val=5; printf("%f\n", val);
↓
hoge.c:6:2: warning: format '%f' expects type 'double', ...
printf() のフォーマット(%f)と、それで表示される変数 (va...
> printf() 関数は可変長引数をとるため、原理的にはプロトタ...
-
int val; scanf("%f", val);
↓
hoge.c:6:1: warning: format '%f' expects type 'float *',...
scanf() のフォーマット (%f) と、それで書き込まれる変数 (v...
*** 変数の値を表示させる [#qd562d66]
printf("a = %d\n", a);
fprintf(stderr, "a = %d\n", a);
*** 余分なセミコロン [#wb33caf7]
if/while/for の後ろに ";" が付いていると、ほぼバグです。
if ( x == 0 ); ←この ";" が余分
{
printf("x is zero.\n");
}
行末のセミコロンは違和感がないため、if/while/for の後ろに...
> 「ブロックの中身が空っぽ」というのは、確かに if では不...
このバグを未然に防ぐためには、ブロックの書き方を変更して...
if ( x == 0 ) {
printf("x is zero.\n");
}
この {} のスタイルを好む人は、行数を少なくできることに意...
> なお、ブロック {} のスタイルについては、C 言語の教科書...
> また、世間のプロジェクトの多くではコーディングスタイル...
> さらに、エディタや開発環境によっては自動フォーマットの...
終了行:
[[Cygwinでデバッグ]]
#contents
** 不可解な動作 [#se83500f]
コンパイルエラーも出ないし、実行させてもエラーは出ないけ...
*** 警告レベルを上げる [#m8730d3e]
gcc コンパイラには、オプションによって動作を切り替える指...
gcc -Wall hoge.c
と "-Wall"(''W''arning ''all'' の意味)のオプションを付...
この "-Wall" オプションは、完成する a.exe には影響しない...
alias gcc='gcc -Wall'
Windows のエクスプローラでは、この名前のファイルを作るこ...
echo "alias gcc='gcc -Wall'" >> ~/.bash_profile
*** 警告される例 [#r17b36b6]
上記のオプションを付けておくと、次のような時に警告してく...
-
if (i = 0) { .... }
↓
hoge.c:6:2: warning: suggest parentheses around assignme...
if の条件を書くべきところで、代入 (=) を行っています。比...
> このような間違いを避けるために 0 == i と左右の項を入れ...
> ちなみに Java ではこの間違いはコンパイルエラーになりま...
//>> Java のコーディングスタイルを提案している著名な文書...
-
int val; printf("%d\n", val);
↓
hoge:4:9: warning: uninitialized variable 'val'
初期化されてない変数を使っています。ただし、この警告を出...
-
int val=5; printf("%f\n", val);
↓
hoge.c:6:2: warning: format '%f' expects type 'double', ...
printf() のフォーマット(%f)と、それで表示される変数 (va...
> printf() 関数は可変長引数をとるため、原理的にはプロトタ...
-
int val; scanf("%f", val);
↓
hoge.c:6:1: warning: format '%f' expects type 'float *',...
scanf() のフォーマット (%f) と、それで書き込まれる変数 (v...
*** 変数の値を表示させる [#qd562d66]
printf("a = %d\n", a);
fprintf(stderr, "a = %d\n", a);
*** 余分なセミコロン [#wb33caf7]
if/while/for の後ろに ";" が付いていると、ほぼバグです。
if ( x == 0 ); ←この ";" が余分
{
printf("x is zero.\n");
}
行末のセミコロンは違和感がないため、if/while/for の後ろに...
> 「ブロックの中身が空っぽ」というのは、確かに if では不...
このバグを未然に防ぐためには、ブロックの書き方を変更して...
if ( x == 0 ) {
printf("x is zero.\n");
}
この {} のスタイルを好む人は、行数を少なくできることに意...
> なお、ブロック {} のスタイルについては、C 言語の教科書...
> また、世間のプロジェクトの多くではコーディングスタイル...
> さらに、エディタや開発環境によっては自動フォーマットの...
ページ名: