「C言語/標準ライブラリ」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
s/0L/0/1、K&R2では A12.5 条件付きコンパイルで『マクロ展開後に残る識別子は 0L に置き換えられる。』となっていた。
タグ: 2017年版ソースエディター
1 行
C言語では、他の言語とでは「命令」として持つような入出力や文字列操作などの機能を標準ライブラリとして提供しています<ref name="jtc1-sc22-wg14-n1570-7">{{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=180, §7. ''Library''
| publisher = ISO/IEC}}</ref>。そのため、C言語を学ぶことは、どの様なライブラリ関数があるのか?、ライブラリ関数がどのヘッダーで宣言されているのか?、を覚えることが多くなります。
11 行
C言語の規格 ISO/IEC 9899:2011(通称C11)の§7. ''Library'' §7.1 ''Introduction'' §7.1.1 ''Definitions of terms'' に用語定義が有り短いので引用/和訳しました<ref name="jtc1-sc22-wg14-n1570-7.1.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=180, §7.1.1 ''Definitions of terms''
| publisher = ISO/IEC}}</ref>。
40 行
C11以降では標準ライブラリの機能の一部の実装が任意になりました<ref name="jtc1-sc22-wg14-n1570-6.10.8.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=177, §6.10.8.3 ''Conditional feature macros''
| publisher = ISO/IEC}}</ref>。
50 行
C11以降では新しく境界検査インターフェース( ''Bounds-checking interfaces'' )が提供され、マクロ '''__STDC_WANT_LIB_EXT1__''' によって制御するようになりました<ref name="jtc1-sc22-wg14-n1570-k.3.1.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=583, §K.3.1.1 ''Standard headers''
| publisher = ISO/IEC}}</ref>。
57 行
ANSI C 以降では未定義のマクロの値は 0 とみなされる<ref name="jtc1-sc22-wg14-n1570-6.10.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=162, §6.10.1 ''Conditional inclusion''
| quote = all remaining identifiers (including those lexically identical to keywords) are replaced with the pp-number 0, and then each preprocessing token is converted into a token.
| publisher = ISO/IEC}}</ref><ref>未定義マクロが 0 とみなされる挙動は、ミススペル(典型的には _ の数の間違え)で本体は 1 なマクロが 0L0 とみなされる発見困難なバグに繋がります。clang や gcc であればコマンドラインから -Wundef を指定することで未定義マクロの参照を警告させることが出来ます(-Wallでは、-Wundefが有効にならないことに注意してください)。</ref>ので、'''__STDC_WANT_LIB_EXT1__'''を定義していない従来のソースコードは「境界検査インターフェースの使用を求めない」と解されます。
 
; __STDC_WANT_LIB_EXT1__の使用例
105 ⟶ 106行目:
* [[C言語/標準ライブラリ/アライメント|アライメント<stdalign.h>]]<sup>'''C11'''</sup><ref name="jtc1-sc22-wg14-n1570-7.15">{{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=268, §7.15 ''Alignment <stdalign.h>''
| publisher = ISO/IEC}}</ref>
111 ⟶ 112行目:
* [[C言語/標準ライブラリ/アトミック|アトミック<stdatomic.h>]]<sup>'''C11'''</sup><ref name="jtc1-sc22-wg14-n1570-7.17">{{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=273, §7.17 ''Atmics <stdatomic.h>''
| publisher = ISO/IEC}}</ref>
122 ⟶ 123行目:
* [[C言語/標準ライブラリ/_Noreturn|_Noreturn<stdnoreturn.h>]]<sup>'''C11'''</sup><ref name="jtc1-sc22-wg14-n1570-7.23">{{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=361, §7.23 ''_Noreturn <stdnoreturn.h>''<!-- 章タイトル『_Noreturn』はキーワードなので項目名も [[C言語/標準ライブラリ/_Noreturn]] とした。 -->
| publisher = ISO/IEC}}</ref>
129 ⟶ 130行目:
* [[C言語/標準ライブラリ/スレッド|スレッド<threads.h>]]<sup>'''C11'''</sup><ref name="jtc1-sc22-wg14-n1570-7.26">{{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=376, §7.26 ''Threads <threads.h>''
| publisher = ISO/IEC}}</ref>
136 ⟶ 137行目:
* [[C言語/標準ライブラリ/Unicodeユーティリティ|Unicodeユーティリティ<uchar.h>]]<sup>'''C11'''</sup><ref name="jtc1-sc22-wg14-n1570-7.28">{{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=398, §7.28 ''Unicode utilities <uchar.h>''
| publisher = ISO/IEC}}</ref>