0

整数のカスタム typedef を作成するとき、デフォルトの数値型を使用しているときにコンパイラが警告することは可能ですか?

例えば、

typedef int_fast32_t    kint;

int_fast32_t test=0;//Would be ok
kint test=0; //Would be ok
int test=0; //Would throw a warning or error

大規模なプロジェクトを変換していますintが、プラットフォームのデフォルト サイズが32767であり、問​​題が発生しています。この警告は、コードで int を使用しないようにユーザーに警告します。

可能であれば、これが GCC と VC++2012 で動作する場合は素晴らしいことです。

4

4 に答える 4

1

私は gcc にはそのようなオプションがないと確信しています。

ソース コード内の定義済みの型への参照を検出するプログラムを作成し、そのツールをビルド プロセスの一部として自動的に呼び出すことをお勧めします。特定のキーワードで検索するだけで十分でしょう。

これを自分のソース ファイルに限定してください。定義済みおよびサードパーティのヘッダーは、定義済みの型を広範囲に使用する可能性があります。

しかし、禁止を絶対にするつもりはありません。定義済みの型を使用する標準ライブラリ関数が多数あります。たとえば、 inを以外としてc = getchar()宣言しても意味がありません。そして、次のようなものには問題はありませんcintfor (int i = 0; i <= 100; i ++) ...

理想的には、定義済みの型を適切に使用することを目標にする必要があります。この言語では、intが 32767 を超える可能性があることは保証されていません (ただし、「適切な」使用を自動的に検証することは困難または不可能です)。

于 2012-08-12T21:25:18.060 に答える
0

一括交換を行うことをお勧めしますint->old_int_t移植の最初に。このようにして、大きな制限に直面することなくコードの変更を続けると同時に、まだ更新されていないすべての場所にアクセスできます。

最終的に、作業が終了すると、すべての発生がなくなるold_int_tはずです。

于 2012-08-12T21:27:41.980 に答える
0

何らかの方法でキーワードintを定義解除できたとしても、コンパイラがその型を使用することになる場合が多いため、その型の使用を妨げることはありません。整数リテラルの明白なケースを超えて、整数の昇格を含むより微妙なケースがいくつかあります。たとえば、intたまたま 64 ビットの場合、型の 2 つの変数間の操作は、ではなくuint32_ttype を使用して実行されます。一部の変数が数値を表し(実用的な場合は熱心に昇格する必要があります)、他の変数がラッピング代数環のメンバーを表す (昇格されるべきではない)ことを指定できるのは素晴らしいことですが、そのようなことを行う機能がないことを私は知っています。事。結果、やむを得ない。intuint32_tint

于 2014-03-15T23:44:07.313 に答える
0

最初にすべてを置換してから、これを徹底的に文書化することで、これに取り組みます。

プリプロセッサ ディレクティブを使用できます。

#define int use kint instead

技術的には、これは未定義の動作であり、サードパーティのヘッダーを含める前にこの定義を行うと、問題が発生することに注意してください。

于 2012-08-12T21:23:14.637 に答える