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

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
M セルフ競合編集
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
36 行
また、"''white-space wide character''"(ワイド空白文字?) という表現は、iswspaceで定義された(実行)white-space wide characterを指す。
</blockquote>
 
== 条件付き機能マクロ ==
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>。
例えば、処理系が <code><complex.h></code> で宣言される複素数機能をサポート'''しない'''場合、マクロ '''__STDC_''NO''_COMPLEX__''' が 1 に定義されます。
また特定のヘッダーファイルとは結びつきませんが、可変長配列機能をサポート'''しない'''場合は、マクロ '''__STDC_''NO''_VLA__''' が 1 に定義されます。
{{See also|C言語/前処理指令#事前定義済みマクロ定数一覧}}
 
== 境界検査インターフェース ==
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>。
'''__STDC_WANT_LIB_EXT1__'''は利用者が定義するもので、境界検査インターフェースを宣言している標準ヘッダーファイルをインクルードする前に定義を行います。
'''__STDC_WANT_LIB_EXT1__'''を 1 に定義すると境界検査インターフェースの使用を求め、0 に定義すると境界検査インターフェースの使用を求めない意味になります。
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''
| publisher = ISO/IEC}}</ref><ref>未定義マクロが 0 とみなされる挙動は、ミススペル(典型的には _ の数の間違え)で本体は 1 なマクロが 0L とみなされる発見困難なバグに繋がります。clang や gcc であればコマンドラインから -Wundef を指定することで未定義マクロの参照を警告させることが出来ます(-Wallでは、-Wundefが有効にならないことに注意してください)。</ref>ので、'''__STDC_WANT_LIB_EXT1__'''を定義していない従来のソースコードは「境界検査インターフェースの使用を求めない」と解されます。
 
; __STDC_WANT_LIB_EXT1__の使用例
: <syntaxhighlight lang=c highlight="1,9" line>
#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
 
int main(void)
{
char buf[16];
 
puts("Please enter some string.");
gets_s(buf, sizeof(buf));
puts(buf);
 
return 0;
}</syntaxhighlight>
:上の例では、gets_s() が境界検査インターフェースを提供する関数です。
 
{{コラム|__STDC_WANT_IEC_60559_EXT__|
C23では、ユーザー定義マクロ '''__STDC_WANT_IEC_60559_EXT__''' と処理系定義マクロ '''__STDC_IEC_60559_DFP__''' などによってISO/IEC 60559:2020(IEEE 754として知られる浮動小数点算術に関する標準)の機能の要求を制御する予定です<ref name="jtc1-sc22-wg14-n1570-k.3.1.1">{{cite book
| url = open-std.org/jtc1/sc22/wg14/www/docs/n2596.pdf
| title = ISO/IEC 9899:202x (E) working draft — December 11, 2020 N2596
| page=445, §F.5 ''Conversions between binary floating types and decimal character sequences''
| publisher = ISO/IEC}}</ref>。
}}
 
==標準ライブラリのヘッダーファイル一覧==
42 ⟶ 91行目:
* [[C言語/標準ライブラリ/診断機能|診断機能<assert.h>]]
* [[C言語/標準ライブラリ/複素数計算|複素数計算<complex.h>]]
** C11以降ではサポートされていない場合は処理系により、__STDC_NO_COMPLEX__ が 1 に定義されます。
* [[C言語/標準ライブラリ/文字操作|文字操作<ctype.h>]]{{進捗|100%|2013-10-18}}
* [[C言語/標準ライブラリ/エラー|エラー<errno.h>]]
* [[C言語/標準ライブラリ/浮動小数点環境|浮動小数点環境<fenv.h>]]
* [[C言語/標準ライブラリ/浮動小数点型の特性|浮動小数点型の特性<float.h>]]
* [[C言語/標準ライブラリ/整数型の書式変換|整数型の書式変換特性<inttypes.h>]]
* [[C言語/標準ライブラリ/代替つづり|代替つづり<iso646.h>]]
* [[C言語/標準ライブラリ/整数型の大きさ|整数型の大きさ<limits.h>]]
64 ⟶ 114行目:
| page=273, §7.17 ''Atmics <stdatomic.h>''
| publisher = ISO/IEC}}</ref>
** C11以降ではサポートされていない場合は処理系により、__STDC_NO_ATOMICS__ が 1 に定義されます。
 
* [[C言語/標準ライブラリ/論理型及び論理値|論理型及び論理値<stdbool.h>]]
* [[C言語/標準ライブラリ/共通の定義|共通の定義<stddef.h>]]
82 ⟶ 132行目:
| page=376, §7.26 ''Threads <threads.h>''
| publisher = ISO/IEC}}</ref>
** C11以降ではサポートされていない場合は処理系により、__STDC_NO_THREADS__ が 1 に定義されます。
* [[C言語/標準ライブラリ/日付及び時間|日付及び時間<time.h>]]
* [[C言語/標準ライブラリ/Unicodeユーティリティ|Unicodeユーティリティ<uchar.h>]]<sup>'''C11'''</sup><ref name="jtc1-sc22-wg14-n1570-7.28">{{cite book