2017-11-16 6 views
-1

私はbool変数で遊んでいました。私はブール値が真(0以外の他の任意の数)または偽(数0)を表すために使用されることを認識しています。私は変数がランダムな整数値を作成することに気付きました。ブール変数を使って乱数を生成できるかどうか疑問に思っていましたか?誰かがキーワードbooleanによって引き起こされるこの動作を詳しく教えてください。次のようにブール変数を使用して乱数を生成できますか?

私のコードは次のとおりです。

#include<stdio.h> 
    #include<stdbool.h> 

    int main() 
{ 
    bool a,b,c,d,e,f,g,h,i,j,k; 

    printf("%d\n",a); 
    printf("%d\n",b); 
    printf("%d\n",c); 
    printf("%d\n",d); 
    printf("%d\n",e); 
    printf("%d\n",f); 
    printf("%d\n",g); 
    printf("%d\n",h); 
    printf("%d\n",i); 
    printf("%d\n",j); 
    printf("%d\n",k); 
} 

答えて

4

これはブール値に固有の動作ではありません。これは、uninitialized variableを使用しているために発生します。これはランダムではなく、安全ではありません。これはundefined behaviourです。あなたはそれをどうしても避けてください。

+0

C標準では、初期化されていないオブジェクトの値は不定です。これは必ずしも未定義の動作につながるわけではありません。 –

+0

たとえば、 'unsigned char x; printf( "%d%d"、x、x);は同じ番号を2回印刷する必要があります。動作がC標準に従って定義されていない場合、これは2つの異なる値を出力するか、クラッシュします。しかし、その動作は未定義ではありません。あたかも 'x'がある値を持っているかのように動作します。 –

+0

@EricPostpischil参考になっていますか?私はそれが未定義で、C++標準と同じだと思った? –

0

ブール値はランダムに定義されていません。これらの変数のデフォルト値はfalseです。コンパイラで。デフォルト値は、時折ランダム0または1ではなく一貫性があります。

+0

実際には、デフォルト値として値を使用しません。ほとんどの実装では、boolが作成されるメモリ内の値は何でも構いません。それは0か何か他のものかもしれません。グローバルまたは静的と宣言されている場合にのみ、デフォルトに設定されます。 –

+0

私はそう思っています。おそらくいくつかの言語は0から何かを持っているかもしれませんが、0と1しか持たないものもあれば、ブール値は0と1です。 1 –

+0

Per C 2011(N1570)6.7.9 10: "自動保存期間を持つオブジェクトが明示的に初期化されていない場合、その値は不定です。" –

関連する問題