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

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
→‎関数指定子: 2種類目の関数指定子_Noreturnの追加で、→‎関数の応用: から→‎関数指定子: を独立。
タグ: 2017年版ソースエディター
143 行
int main(int argc, char *argv[])
{
for (int i = 0; i < argc; i++i) {
{
printf("argv[%d]の値 : %s\n", i, argv[i]);
}
192 ⟶ 191行目:
<ref>『JISX3010:2003』p.9「5.1.2.2.3 プログラム終了処理」</ref>
 
=== 関数の応用指定子 ===
==== _Noreturninline関数指定子 ====
 
_Noreturninline関数指定子は、関数mainには適の宣言だけで使用できません
==== inline ====
inline関数指定子inlineは、その関数の宣言だけで使用でき呼び出しを可能な限り速くすることを示唆する。
関数指定子inlineは、その関数の呼び出しを可能な限り速くすることを示唆する。
この示唆が効果をもつ程度は、処理系定義とする。
<ref>『JISX3010:2003』p.83「6.7.4 関数指定子」</ref>
219 ⟶ 217行目:
</syntaxhighlight>
 
==== _Noreturn関数指定子 ====
_Noreturn関数指定子inlineは、その関数呼び出しを可能元に戻ら限り速くすることを示しま
_Noreturn関数指定子と<stdnoreturn.h>ヘッダファイルは、C11で追加されました<ref>『ISO/IEC 9899:2011』「6.7.4 Function specifiers」</ref>。
<syntaxhighlight lang="C">
_Noreturn void f (void) {
{
abort();
</syntaxhighlight>
_Noreturn関数指定子は、関数が呼び出し元main戻らないことを示しは適用できせん
 
=== 関数の応用 ===
==== 関数へのポインタ ====
関数へのポインタとは、
303 ⟶ 313行目:
int div(int a, int b)
{
if (b==0){
printf("0で割ることはできません。\n");
return 0;
}else{
else{
return a/b;
}
320 ⟶ 331行目:
printf("計算方法を入力してください(0=加法、1=減法、2=乗法、3=除法)。:");
scanf("%d", &arithmetic);
if (0<=arithmetic&&arithmetic<=3)
printf("答えは%d。\n", (*func[arithmetic])(i,j));
}
382 ⟶ 393行目:
factorial(3)に戻り、1*1*2*3が返される。
</syntaxhighlight>
 
== _Noreturn関数指定子 ==
_Noreturn関数指定子は、関数が呼び出し元に戻らないことを示します。
_Noreturn関数指定子と<stdnoreturn.h>ヘッダファイルは、C11で追加されました<ref>『ISO/IEC 9899:2011』「6.7.4 Function specifiers」</ref>。
<syntaxhighlight lang="C">
_Noreturn void f (void) {
abort();
</syntaxhighlight>
_Noreturn関数指定子は、関数mainには適用できません。
 
== 構造体のビットフィールド ==