「C言語/中級者向けの話題」の版間の差分
削除された内容 追加された内容
→ホスト環境: C11に一対一に対応するよう構成。 タグ: 2017年版ソースエディター |
Fix ref タグ: 2017年版ソースエディター |
||
180 行
==== ホスト環境 ====
ホスト環境を提供する必要はありませんが、存在する場合は以下の仕様に準拠する必要があります<ref name="jtc1-sc22-wg14-n1570-5.1
| url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
| title= C11: WG14/N1570 Committee Draft — April 12、 2011 ISO/IEC 9899:201x
300 行
<syntaxhighlight lang="C">
//例 関数へのポインタの引数
int main(void)
{
func2(func1);
}
#include <stdio.h>
void func1() { printf("func1()が呼び出されました。\n"); }
printf("func2()が呼び出されました。\n"); }
int main(void) {
func2(func1);
}
</syntaxhighlight>
324 ⟶ 322行目:
#include <stdio.h>
int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }
int div(int a, int b) {
if (b == 0) {
printf("0で割ることはできません。\n");
return 0;
} else {
return a / b;
}
}
int
int i, j;
int arithmetic;
int (*func[])(int a, int b) = {add, sub, mul, div};
printf("2つの整数をスペースで区切って入力してください。:");
printf("計算方法を入力してください(0=加法、1=減法、2=乗法、3=除法)。:");
scanf("%d", &arithmetic);
if (0 <= arithmetic && arithmetic <= 3)
printf("答えは%d。\n", (*func[arithmetic])(i, j));
}
</syntaxhighlight>
383 ⟶ 366行目:
関数を呼び出したときの状態を復元し、
処理を続ける。<ref>矢沢久雄、原田英生『日経 BP パソコンベストムック C言語とC++がわかる本』日経ソフトウェア、2013年5月15日発行、112項</ref>
再帰を行うには、その関数がリエントラントである必要がある。
394 ⟶ 376行目:
int factorial(int n);
int main(void) {
int i;
printf("整数を入力してください:");
scanf("%d", &i);
printf("%dの階乗は%dです。", i, factorial(i));
}
int factorial(int n) {
if (n == 0)
}
</syntaxhighlight>
430 ⟶ 411行目:
その名前でアクセスできる。
ビットフィールドは、構造体の型枠を宣言する時メンバとして次のように記述する。
<syntaxhighlight lang="C">
データ型 メンバ名:サイズ;
438 ⟶ 417行目:
データ型は、(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;
} bits;
bits.bit8); }
</syntaxhighlight>
;結果:<syntaxhighlight lang="text">
bitsのメンバの値は、1 0 1 0 1 0 1 0です。
bitsのサイズは、1です。
</syntaxhighlight>
上の例では、0か1かの値を持つ1ビットの8つのビットフィールドをもつbits構造体を宣言し各ビットフィールドに値を代入しその値を表示している。
なお、unsigned char型をビットフィールドに使えるかはコンパイラによる。
== 脚
<references />
|