2016-10-18 4 views
1

クイック単純な質問(ほとんど好奇心):システムが警告なしでlongを受け入れる理由intがint引数として渡されるのはなぜですか?

私はC++プログラムlong intで例えば宣言し、その後、私はそれを与える場合を除き、それは問題なく動作します知っているintを取る機能でそれを呼び出す場合4バイトの大きさの値で、印刷内容が悪くなります。

しかし、これについては何も警告しないということは私には驚きです。私が4バイトのlong intを宣言すると、システムはその値を格納する32ビットを持つことを知ります。しかし、同じlong intint(2バイト)だけを呼び出す関数に渡すと、この値では使用しないで16ビットのメモリを使用していると仮定しています。

私は正しいですか?または、それは引数として受け取ったlong intから最低の16ビットだけを使用しますか?ここでのプロセスは何ですか?

コード例:

#include <stdio.h> 

void test(int x) // My question is why it accepts this? 
{ 
    printf("%d", x); 
} 


int main() 
{ 
    long int y=4294967200; // 32 bits 

    test(y); 
    return 0; 
} 
+0

実際のコードサンプルについてお話ししていただけますか? –

+0

は既に編集済みです。私の質問は、intを受け取ったと思われる関数にlong intを渡すことを受け入れる理由です。 – Miguel

+0

これは暗黙の整数変換があるためです。 –

答えて

2

あなたのコンパイラでその機能を有効にしなかったので、それが最も可能性が高いです。例えば、変換の警告とGCCが有効に使用しています:

警告:「int型への変換を、このような警告が有効になっていない理由を質問がある場合は「long int型」その値

を変更することができるから、デフォルトでは、非常に一般的なコードパターンの多くが、自動プロモーションのために大量の偽の警告を生成するためです。たとえば、unsigned char p[10]; ... p[1] ^= 1;です。

+1

私は、グローバルな現金、通貨、財務犯罪に関するあなたの記事を読むことに追加されています。非常にまれに私はそのようなことを見ます、それは私がまだ考えている人がいることを認識させる。 –

関連する問題