4

long から int への暗黙的な変換に時間がかかるたびに警告をスローするようにコンパイラ (私は gcc バージョン 4.1.2 20080704 (Red Hat 4.1.2-46) または icc 11.1 を使用しています) に指示する方法があるかどうか疑問に思っていました。場所。たとえば、test.c次のコードを含むファイルをコンパイルします。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv)
{
    int n = atol(argv[1]);
    printf("int: %d\n", n);
    long int N = atol(argv[1]);
    printf("long: %ld\n", N);

    return 0;
}

と:

gcc -Wall -Wconversion test.c -o test

警告は生成されません。結果のバイナリを次のように実行します

./test 12345678901

予想通り、私は得る:

int: -539222987
long: 12345678901

数値 12345678901 は int をオーバーフローしましたが、long をオーバーフローしませんでした。このようなことが起こる可能性があるときはいつでも、コンパイラーに教えてもらいたいです。オプション -Wconversion は予期せず (私には) それを行いません。

ありがとう、

ミケーレ

4

3 に答える 3

4

gcc のバージョンに-Wshorten-64-to-32. コードで浮動小数点を使用している場合は、偽の double -> float 変換警告が大量に発生する可能性があることに備えてください。

編集:shorten-64-to-32悲しいことに、メインラインが決して取り上げなかったAppleの拡張機能である可能性があると思います。そのため、gcc-4.3 以降にアップグレードしない限り、うまくいかない可能性があります。

于 2009-11-18T23:19:43.070 に答える
3

gcc 4.3.0 を試す

http://gcc.gnu.org/wiki/NewWconversion

于 2009-11-18T23:22:54.697 に答える
0

の動作が-Wconversion GCC4.3 で変更されました- コンパイラを更新して再試行してください (32 ビット システムを使用しているため、実際に動作するかどうかは確認できませんが、警告が正しく出力されるためatoll、動作するはずです)...

于 2009-11-18T23:20:20.963 に答える