情報が失われてしまうような代入について警告を出したいのですが、
どういったオプションを用いればよいでしょうか?
コンパイラはGCCの3.x系か4.x系でお願いします。
以下のようなソースで型変換に関する警告がほしいんです。
--- test.c ---
#include <stdio.h>
int main(void)
{
int a = 66000;
short b;
b = a; // <- 暗黙の型変換
printf("%d\n", b);
return 0;
}
実行結果
$ ./test
464
以下のオプションを試しましたが、上記のソースでは
何の警告も出ませんでした。
-W
-Wall
-Wconversion
-Wimplicit
ご存知の方いらっしゃいましたら、どうかお助け下さい。
No.1ベストアンサー
- 回答日時:
version 4.3では、-Wconversion で警告が出ました。
それ以前のversionでは、おそらく無理です。
4.3の新機能だったんですね。
「以下のオプションを試しましたが、」と書きましたが、GCC4.3では
試していませんでした。
スミマセン。
GCC4.3とNo2様のsplintの両方を試してみて、使いやすそうな方を
検討してみます。
ありがとうございました。
No.2
- 回答日時:
のように、警告が出なかったようですね。
このブログの方は、splintというコードチェックツールを紹介されていましたが。
#1さんが書かれているように、4.3から警告できるようになったようです。
GCC 4.3 Release Series(Changes, New Features, and Fixes):
http://gcc.gnu.org/gcc-4.3/changes.html
The -Wconversion option has been modified. Its purpose now is to warn for implicit conversions that may alter a value. This new behavior is available for both C and C++.
Lintを使う発想はありませんでした。
目から鱗です。
シンプルなソースならsplint、GCC拡張コードとかが含まれる
移植性の低いコードにはGCC4.3といった形でソースコードチェックを
実施してみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# ポインタの型変換、どうやるんでしたっけ? 2 2022/03/28 11:00
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# (C言語)めちゃくちゃな値になってしまいます。 5 2022/08/13 11:55
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# プログラミングの授業のペーパーテスト 実行結果を答えろ #include int x[ ] = {1 3 2022/06/16 20:08
- C言語・C++・C# プログラミングペーパーテスト 次の問題の実行結果を答えろ #include int x[ ] = { 1 2022/06/16 21:49
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミングのペーパーテスト 実行結果の表示を答えてください #include <stdio.h> 2 2022/07/09 16:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
2重定義って??
-
関数の実体定義にヘッダファイ...
-
sshdログの意味
-
C++でboolにintの値を代入する...
-
long型の定数の末尾にLを付ける...
-
typedef enumの使い方を教えて...
-
C言語で分割ファイル先の関数を...
-
C言語 宣言した変数になにも代...
-
DLLでLIBファイルが作成されない
-
変数の型を定義しなかった場合...
-
C言語での方向キー入力判定
-
C言語でmain関数でのreturnとexit
-
intとINTの違いは?
-
呼び出し時のパラメータが足りない
-
gccのエラー "initialization d...
-
構造体の宣言でエラーが出ます。
-
VB6から参照可能なDLLの作成
-
int main の前のint add(int a,...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
2重定義って??
-
long型の定数の末尾にLを付ける...
-
C++のfor文について
-
typedef enumの使い方を教えて...
-
関数の実体定義にヘッダファイ...
-
変数の型を定義しなかった場合...
-
ハンドルされていない例外が発...
-
C++でboolにintの値を代入する...
-
main.c:7:43: warning: implici...
-
プログラムの中で別のmainを呼...
-
【#define】 defineで定義した...
-
void func( void )について
-
構造体の要素すべてに対する四...
-
構造体の宣言でエラーが出ます。
-
C++の(左辺値)参照を参照渡し
-
main()とint main(void)の違い
-
intとINTの違いは?
-
DLLでLIBファイルが作成されない
おすすめ情報