「C言語/中級者向けの話題」の版間の差分

削除された内容 追加された内容
ページ作成時の編集で、仮引数の話題の引用元 C言語/関数 2018年7月7日 (土) 07:41‎ が消えていたので、引用元をコメント欄に追記するためのカラ編集。
構造体のビットフィールドの話題を後回しに。理由: 関数の仮引数や再帰のほうが使用頻度が高いだろうから。
4 行
 
宣言以外のときに代入したい場合には、面倒だが、各要素に一個ずつ中身を代入していくしかない。
 
== 構造体のビットフィールド ==
ビットフィールドとは、
1ビット以上のビットからなる、
構造体のメンバの一種である。
ビットフィールドを用いると、
1ビット以上のビットに名前をつけ、
その名前でアクセスできる。
 
ビットフィールドは、
構造体の型枠を宣言する時、
メンバとして次のように記述する。
<syntaxhighlight lang="C">
データ型 メンバ名:サイズ;
</syntaxhighlight>
 
データ型は、(signed) intまたはunsigned intを指定する。
(signed) intを指定すると、
上位ビットが符号として扱われる。
メンバ名とサイズとを「:(コロン)」で区切る。
サイズはそのメンバを何ビットで表すかを指定する。
 
<syntaxhighlight lang="C">
//例 ビットフィールド
#include <stdio.h>
 
int main(void)
{
struct sbits
{
unsigned char bit8:1;
unsigned char bit7:1;
unsigned char bit6:1;
unsigned char bit5:1;
unsigned char bit4:1;
unsigned char bit3:1;
unsigned char bit2:1;
unsigned char bit1:1;
}bits;
 
bits.bit1=1;
bits.bit2=0;
bits.bit3=1;
bits.bit4=0;
bits.bit5=1;
bits.bit6=0;
bits.bit7=1;
bits.bit8=0;
printf("bitsのメンバの値は、%d %d %d %d %d %d %d %dです。\n",
bits.bit1,bits.bit2,bits.bit3,bits.bit4,bits.bit5,bits.bit6,bits.bit7,bits.bit8);
printf("bitsのサイズは、%dです。\n", sizeof(bits));
}
</syntaxhighlight>
 
上の例では、
0か1かの値を持つ1ビットの、
8つのビットフィールドをもつ、
bits構造体を宣言し、
各ビットフィールドに値を代入し、
その値を表示している。
なお、unsigned char型をビットフィールドに使えるかは、コンパイラによる。
 
 
 
 
== 関数 ==
423 ⟶ 358行目:
factorial(3)に戻り、1*1*2*3が返される。
</syntaxhighlight>
 
 
== 構造体のビットフィールド ==
ビットフィールドとは、
1ビット以上のビットからなる、
構造体のメンバの一種である。
ビットフィールドを用いると、
1ビット以上のビットに名前をつけ、
その名前でアクセスできる。
 
ビットフィールドは、
構造体の型枠を宣言する時、
メンバとして次のように記述する。
<syntaxhighlight lang="C">
データ型 メンバ名:サイズ;
</syntaxhighlight>
 
データ型は、(signed) intまたはunsigned intを指定する。
(signed) intを指定すると、
上位ビットが符号として扱われる。
メンバ名とサイズとを「:(コロン)」で区切る。
サイズはそのメンバを何ビットで表すかを指定する。
 
<syntaxhighlight lang="C">
//例 ビットフィールド
#include <stdio.h>
 
int main(void)
{
struct sbits
{
unsigned char bit8:1;
unsigned char bit7:1;
unsigned char bit6:1;
unsigned char bit5:1;
unsigned char bit4:1;
unsigned char bit3:1;
unsigned char bit2:1;
unsigned char bit1:1;
}bits;
 
bits.bit1=1;
bits.bit2=0;
bits.bit3=1;
bits.bit4=0;
bits.bit5=1;
bits.bit6=0;
bits.bit7=1;
bits.bit8=0;
printf("bitsのメンバの値は、%d %d %d %d %d %d %d %dです。\n",
bits.bit1,bits.bit2,bits.bit3,bits.bit4,bits.bit5,bits.bit6,bits.bit7,bits.bit8);
printf("bitsのサイズは、%dです。\n", sizeof(bits));
}
</syntaxhighlight>
 
上の例では、
0か1かの値を持つ1ビットの、
8つのビットフィールドをもつ、
bits構造体を宣言し、
各ビットフィールドに値を代入し、
その値を表示している。
なお、unsigned char型をビットフィールドに使えるかは、コンパイラによる。
 
== 脚注 ==