5

C およびアセンブリ (intelx8086) 言語で作業しようとしています。

私はまた、私の友人によって実装された 1 つのクラスを使用しています。それは

typedef enum data_10 {a=0,b=7,c=10,} data_10_type;

このクラスをビット単位で操作したい (別名、アセンブリで構築/破棄)。私の質問は、「enum」がどのくらいのメモリを必要とするかです。

4

3 に答える 3

6

コンパイラによって異なる場合がありますが、enum通常はint. ただし、いつでも使用できますsizeof( data_10_type );

于 2012-09-04T15:47:31.057 に答える
2

印刷してみませんか?

/* C99 */
#include <stdio.h>

typedef enum { a = 0, b = 7, c = 10 } data_10_type;
printf("%zu\n", sizeof(data_10_type));

列挙子リストの識別子は、型int( C11 §6.7.2.2 列挙指定子) を持つ定数として宣言されるため、sizeof(data_10_type)多くの場合、 と等しくなりsizeof(int)ますが、必須ではありません!

ところで、ビット単位のサイズが必要な場合は、1 バイトに何ビットあるかを示すCHAR_BIT定数 ( で定義) を使用してください)。<limits.h>

/* C99 */
#include <limits.h>
#include <stdio.h>

typedef enum { a = 0, b = 7, c = 10 } data_10_type;
printf("%zu\n", sizeof(data_10_type) * CHAR_BIT);
于 2012-09-04T15:47:10.400 に答える
1

列挙型は実際にはまったくメモリを消費しません。コンパイラによって理解され、コンパイル中に正しい数値が使用されます。これは int であり、そのサイズはシステムによって異なります。

于 2012-09-04T15:47:04.737 に答える