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

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
→‎プログラムの実行環境: {{Main|../概念モデル#実行環境}}
タグ: 2017年版ソースエディター
146 行
のように入力すれば、日本語で「こんにちは」と答える。
 
=== 関数プログラムの実行環境 ===
{{Main|../概念モデル#実行環境}}
 
==== フリースタンディング環境 ====
{{Main|../概念モデル#フリースタンディング環境}}
オペレーティングシステムの恩恵を受けずにCプログラムを実行できる環境を、フリースタンディング環境と呼びます<ref>『JISX3010:2003』p.8「5.1.2.1 フリースタンディング環境」</ref><ref name="jtc1-sc22-wg14-n1570-5.1.2.1">{{cite book
フリースタンディング環境でプログラムが利用できるライブラリ機能は、<float.h>, <iso646.h>, <limits.h>, <stdarg.h>,<stdbool.h>, <stddef.h>, <stdint.h> および <stdnoreturn.h><ref name="jtc1-sc22-wg14-n2596-4."/>で、これ以外は実装で定義されます<ref name="jtc1-sc22-wg14-n2596-4.">{{cite book
| url = http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570c17_updated_proposed_fdis.pdf
| title= C11: WG14/N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x
| archiveurl = https://web.archive.org/web/20181230041359/http://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf
| page=12, § 5.1.2.1 ''Freestanding environment''
| archivedate = 2018-12-30
| publisher=ISO/IEC}}</ref>。
| title = N2176 C17 ballot ISO/IEC 9899:2017
プログラム起動時に呼び出される関数の名前と型は、実装で定義されます。
| page = 8, § 4. ''Conformance''
 
| publisher = ISO/IEC JTC1/SC22/WG14}}</ref>。
フリースタンディング環境でプログラムが利用できるライブラリ機能は、
<float.h>, <iso646.h>, <limits.h>, <stdarg.h>,<stdbool.h>, <stddef.h>, <stdint.h> <ref>『JISX3010:2003』p.5「4 規格合致性」</ref>
および <stdnoreturn.h> <ref name="jtc1-sc22-wg14-n1570-4">{{cite book
| 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
| page=8, § 4. ''Conformance''
| publisher=ISO/IEC}}</ref>であり、
これ以外は実装で定義されます<ref name="jtc1-sc22-wg14-n1570-5.1.2.1" />。
 
==== ホスト環境 ====
{{Main|../概念モデル#ホスト型環境}}
ホスト環境を提供する必要はありませんが、存在する場合は以下の仕様に準拠する必要があります<ref name="jtc1-sc22-wg14-n1570-5.1.2.2">{{cite book
| 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
| page=12、 § 5.1.2.2 ''Hosted environment''
| publisher=ISO/IEC}}</ref><ref>『JISX3010:2003』p.8「5.1.2.2 ホスト環境」</ref>。
 
===== プログラムの開始 =====
{{Main|../概念モデル#プログラムの開始}}
プログラム起動時に呼び出される関数は <code>main</code> と名付けられています。
実装では、この関数のプロトタイプを宣言しない。
この関数は、戻り値の型がintで、パラメータがない状態で定義されなければならない<ref name="jtc1-sc22-wg14-n1570-5.1.2.2.1">{{cite book
| 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
| page=13、 § 5.1.2.2.1 ''Program startup''
| publisher=ISO/IEC}}</ref>。
<syntaxhighlight lang=c>
int main(void) { /* ... */ }
</syntaxhighlight>
 
または、2つの引数(ここではargcとargvとしますが、宣言された関数のローカルなものなので、どのような名前を使ってもかまいません。宣言された関数のローカルなものであるため、どのような名前を使ってもかまいません)<ref name="jtc1-sc22-wg14-n1570-5.1.2.2.1" />。
<syntaxhighlight lang=c>
int main(int argc、 char *argv[]) { /* ... */ }
</syntaxhighlight>
 
またはそれに相当するもの 、またはその他の実装で定義された方法である<ref name="jtc1-sc22-wg14-n1570-5.1.2.2.1" />。
 
===== プログラムの実行 =====
{{Main|../概念モデル#プログラムの実行}}
ホスト環境では、プログラムはライブラリ節に記述されたすべての関数、マクロ、型定義、オブジェクトを使用することができます<ref name="jtc1-sc22-wg14-n1570-5.1.2.2.2">{{cite book
| 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
| page=13、 § 5.1.2.2.2 ''Program execution''
| publisher=ISO/IEC}}</ref><ref>『JISX3010:2003』p.9「5.1.2.2.2 プログラムの実行」</ref>。
 
===== プログラム終了処理 =====
{{Main|../概念モデル#プログラム終了処理}}
main関数の戻り値の型がintと互換性のあるものであれば、最初のmain関数の呼び出しからの戻りは、main関数の戻り値を引数としてexit関数を呼び出したことと同じになります。また、main関数を終了する"}"に到達すると0が返されます<ref name="jtc1-sc22-wg14-n1570-5.1.2.2.3">{{cite book
| 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
| page=13、 § 5.1.2.2.3 ''Program termination''
| publisher=ISO/IEC}}</ref><ref>『JISX3010:2003』p.9「5.1.2.2.3 プログラム終了処理」</ref>。
 
=== 関数指定子 ===