C標準ライブラリは、 libcとも呼ばれ、[要出典] ISO C標準で指定されているC プログラミング言語の標準ライブラリです。[1]オリジナルのANSI C標準から始まり、そのスーパーセットであるC ライブラリ POSIX 仕様と同時に開発されました。 [2] [3] ANSI C は国際標準化機構によって採用されたため、[4] C 標準ライブラリはISO C ライブラリとも呼ばれます。[要出典]
C 標準ライブラリは、文字列操作、数学的計算、入出力処理、メモリ管理、入出力などのタスクのためのマクロ、型定義、関数を提供します。
アプリケーション プログラミング インターフェイス (API)
ヘッダーファイル
C 標準ライブラリのアプリケーション プログラミング インターフェイス( API) は、いくつかのヘッダー ファイルで宣言されています。各ヘッダー ファイルには、1 つ以上の関数宣言、データ型定義、およびマクロが含まれています。
長い安定期間の後、1995 年に批准された C 標準の追加であるNormative Addendum 1iso646.h (NA1) で 3 つの新しいヘッダー ファイル ( 、、、、、wchar.hおよびwctype.h) が追加されました。1999年に発行された C 標準の改訂版である C99 でさらに 6 つのヘッダー ファイル (、、、、、、および) が追加され、2011 年の C11 でさらに 5 つのファイル ( 、、、、、、および)が追加されました。現在、合計で29個のヘッダー ファイルがあります
。complex.hfenv.hinttypes.hstdbool.hstdint.htgmath.hstdalign.hstdatomic.hstdnoreturn.hthreads.huchar.h
ヘッダー ファイルのうち 3 つ ( complex.h、、stdatomic.hおよびthreads.h) は、実装でサポートする必要のない条件付き機能です。
POSIX標準では、Unix 固有の機能のために、いくつかの非標準 C ヘッダーが追加されました。その多くは他のアーキテクチャにも導入されています。例としては、やなどがあります。fcntl.h他unistd.hの多くのグループも他の非標準ヘッダーを使用しています。GNU C ライブラリには、がありalloca.h、OpenVMSには 機能がありますva_count()。
ドキュメント
Unix 系システムでは、API の正式なドキュメントはマニュアル ページの形式で提供されます。ほとんどのシステムでは、標準ライブラリ関数のマニュアル ページはセクション 3 にあります。セクション 7 には、基礎となる概念に関するより一般的なページが含まれている場合があります (例man 7 math_error: Linux )。
実装
Unix ライクなシステムでは通常、共有ライブラリ形式の C ライブラリがありますが、ヘッダー ファイル (およびコンパイラ ツールチェーン) がインストールに含まれていない場合があり、その場合は C 開発が不可能になることがあります。C ライブラリは、Unix ライクなシステムではオペレーティング システムの一部と見なされます。C 標準で指定されている関数に加えて、POSIX標準で指定されている関数など、オペレーティング システム API の一部である他の関数も含まれます。ISO C 標準のものも含め、C ライブラリ関数はプログラムによって広く使用されており、C 言語の実装であるだけでなく、事実上オペレーティングシステム インターフェイスの一部であるかのように見なされています。Unix ライクなオペレーティング システムは、C ライブラリが削除されると、通常機能しなくなります。これは、静的にリンクされているアプリケーションではなく、動的にリンクされているアプリケーションに当てはまります。さらに、カーネル自体は (少なくとも Linux の場合)、どのライブラリからも独立して動作します。
Microsoft Windows では、コア システム ダイナミック ライブラリ ( DLL ) が、 Microsoft Visual C++コンパイラ v6.0用の C 標準ライブラリの実装を提供します。Microsoft Visual C++ コンパイラの新しいバージョンの C 標準ライブラリは、各コンパイラによって個別に提供されるほか、再配布可能なパッケージとしても提供されます。C で記述されたコンパイル済みアプリケーションは、C ライブラリに静的にリンクされるか、またはこれらのアプリケーションに同梱されているライブラリの動的バージョンにリンクされます。対象システムに存在するとは想定されません。コンパイラの C ライブラリ内の関数は、Microsoft Windows へのインターフェイスとは見なされません。
さまざまなオペレーティング システムと C コンパイラーの両方で提供される C ライブラリ実装が多数存在します。人気のある実装の一部を以下に示します。
- BSD libc 、 BSD派生のオペレーティングシステムとともに配布されるさまざまな実装
- GNU C ライブラリ(glibc)。GNU Hurd、GNU/kFreeBSD、およびほとんどのLinuxディストリビューションで使用されています。
- Microsoft C ランタイム ライブラリは、Microsoft Visual C++の一部です。ライブラリには 2 つのバージョンがあります。1 つは、C99 準拠が低い、v12 / Visual Studio 2013 まで再配布可能だった MSVCRT で、もう 1 つは Windows 10 および 11 の一部である新しい UCRT (Universal C Run Time) で、常にリンク可能であり、C99 準拠でもあります [1]。
- dietlibc、C 標準ライブラリの代替の小さな実装 (MMU なし)
- μClibc 、組み込みμClinuxシステム (MMU なし)
用の C 標準ライブラリ
- uclibc-ng は、組み込み C ライブラリで、μClibc のフォークであり、現在もメンテナンスされており、メモリ管理ユニット(MMU) をサポートしています。
- Newlibは組み込みシステム用のC標準ライブラリ(MMUレス)[5]であり、Windows用のCygwin GNUディストリビューションで使用されている。
- klibc、主に Linux システムの起動用
- musl、Linuxシステム用の別の軽量C標準ライブラリ実装[6]
- Bionicは、もともとGoogleがAndroid組み込みシステムオペレーティングシステム用に開発したBSD libcから派生したものだ。
- picolibc はKeith Packardによって開発され、 Newlibと AVR Libcのコードに基づいて、限られた RAM を持つ小型の組み込みシステムを対象としています。
コンパイラ組み込み関数
一部のコンパイラ(例えばGCC [7])は、C標準ライブラリの多くの関数の組み込みバージョンを提供しています。つまり、関数の実装はコンパイルされたオブジェクトファイルに書き込まれ、プログラムはCライブラリの共有オブジェクトファイル内の関数ではなく、組み込みバージョンを呼び出します。これにより、関数呼び出しのオーバーヘッドが削減され、特に関数呼び出しがインラインバリアントに置き換えられた場合に、他の形式の最適化が可能になります(コンパイラは組み込みバリアントの制御フローの特性を認識するため)が、デバッグ時に混乱が生じる可能性があります(例えば、組み込みバージョンをインストルメント化されたバリアントに置き換えることはできません)。
ただし、組み込み関数は、ISO C に従って通常の関数のように動作する必要があります。主な意味は、プログラムがこれらの関数のアドレスを取得してその関数へのポインターを作成し、そのポインターを使用して関数を呼び出すことができる必要があるということです。同じ関数への 2 つのポインターがプログラム内の 2 つの異なる翻訳単位で派生する場合、これらの 2 つのポインターは等しいと評価される必要があります。つまり、アドレスは、外部 (プログラム全体) リンケージを持つ関数の名前を解決することによって取得されます。
リンク、libm
FreeBSD [8]および glibc [9]では、 sin() などの一部の関数はデフォルトではリンクされておらず、代わりに数学ライブラリlibmにバンドルされています。これらの関数のいずれかを使用する場合は、リンカーにディレクティブ を指定する必要があります-lm。POSIX では、c99 コンパイラが をサポートし、ヘッダー 、、および で宣言された関数が が指定されている場合はリンクに使用できることを要求して-lmいますが、関数がデフォルトでリンクされるかどうかは指定していません。[10] musl は、すべてを単一の libc ライブラリにまとめ、空の libm を提供することで、この要件を満たしています。[11]math.hcomplex.hfenv.h-lm
検出
C 標準によれば、実装がホストされている場合、マクロは1__STDC_HOSTED__に定義される必要があります。ホストされた実装には、C 標準で指定されたすべてのヘッダーがあります。実装は、これらのヘッダーが存在しないことを意味する、フリースタンディングである場合もあります。実装がフリースタンディングである場合、 は0に定義される必要があります。
__STDC_HOSTED__
問題と回避策
バッファオーバーフローの脆弱性
C 標準ライブラリの一部の関数は、バッファオーバーフローの脆弱性があり、採用されて以来、バグのあるプログラミングを助長することで悪名高い。 [a]最も批判されている項目は次のとおりです。
strcpy()およびを含む文字列操作ルーチンでは、境界チェックがstrcat()不足しており、境界を手動でチェックしないとバッファ オーバーフローが発生する可能性があります。- 一般的な文字列ルーチンは、副作用があり、無責任なバッファ使用を促し、常に有効なヌル終端出力を保証するわけではなく、線形長さ計算を行う。[b]
printf()ルーチンのファミリは、書式文字列が指定された引数と一致しない場合に実行スタックを台無しにします。この基本的な欠陥により、書式文字列攻撃という一連の攻撃が作成されました。gets()およびscanf()I/O ルーチンのファミリでは、入力長のチェックが (まったくまたは簡単に) 行われません。
の極端なケースを除いてgets()、メモリ管理、境界チェック、入力チェックなどを実行する補助コードを導入することで、すべてのセキュリティ脆弱性を回避できます。これは、標準ライブラリ関数をより安全で使いやすくするラッパーの形で行われることがよくあります。これは、 B. Kernighan と R. Pike の著書『The Practice of Programming 』にまで遡ります。この本では、著者はエラーが発生した場合にエラー メッセージを出力してプログラムを終了するラッパーを一般的に使用しています。
ISO C委員会は技術報告書TR 24731-1 [12]を発行し、境界チェックと自動バッファ割り当てを備えたいくつかの関数の採用を提案するためにTR 24731-2 [13]に取り組んでいます。前者は厳しい批判を受けていますが、賞賛の声も上がっています。 [14] [15]後者は賛否両論です。
懸念にもかかわらず、TR 24731-1 は ISO/IEC 9899:2011 (C11) の Annex K (境界チェック インターフェイス)の C 標準トラックに統合され、Win32 および Win64 プラットフォーム用の Microsoft の C/++ ランタイム (CRT) ライブラリにほぼ実装されました。
(デフォルトでは、Microsoft Visual StudioのCおよびC++コンパイラは、古い「安全でない」関数を使用すると警告を発します。しかし、MicrosoftのTR 24731-1の実装はTR 24731-1とAnnex Kの両方と微妙に互換性がないため、[16]ポータブルプロジェクトではこれらの警告を無効にしたり無視したりするのが一般的です。
#pragma 警告(無効: 4996)
問題の呼び出しサイトの前/周辺、または間接的に
#define _CRT_SECURE_NO_WARNINGS 1
ヘッダーをインクルードする前に行う。[17]コマンドラインオプションは/D_CRT_NO_SECURE_WARNINGS=1これと同じ効果を持つはずです#define。
スレッドの問題、競合状態に対する脆弱性
このルーチンはスレッドセーフではないため、競合状態に対して脆弱であるとstrerror()批判されています。
エラー処理
C標準ライブラリの関数のエラー処理は一貫性がなく、混乱を招くこともあります。Linuxのマニュアルページによるとmath_error、「現在の(バージョン2.8)glibcの状況は乱雑です。ほとんどの(すべてではない)関数はエラー時に例外を発生させます。一部の関数はerrnoも設定します。いくつかの関数はerrnoを設定しますが、例外を発生させません。どちらも行わない関数もごくわずかです。」[18]
標準化
オリジナルのC 言語は、COBOLやFortranなどの従来の言語とは異なり、I/O 操作などの組み込み関数を提供しませんでした。[要出典]時間の経過とともに、C のユーザー コミュニティは、現在 C 標準ライブラリと呼ばれているもののアイデアと実装を共有しました。これらのアイデアの多くは、最終的に標準化された C 言語の定義に組み込まれました。
Unixと C はどちらも、 1960 年代後半から 1970 年代前半にかけてAT&T のベル研究所で開発されました。1970 年代には、C 言語の人気が高まりました。多くの大学や組織が、それぞれのプロジェクト用に独自の言語バリアントを作成し始めました。1980 年代初頭には、さまざまな C 実装間の互換性の問題が明らかになりました。1983 年、米国規格協会(ANSI) は、" ANSI C "として知られる C の標準仕様を確立するための委員会を結成しました。この作業は、1989 年にいわゆる C89 標準の作成に至りました。結果として得られた標準の一部は、ANSI C 標準ライブラリと呼ばれる 一連のソフトウェア ライブラリでした。
POSIX 標準ライブラリ
POSIXおよびSUS は、基本的な C 標準ライブラリにあるルーチンに加えて、使用できるルーチンをいくつか指定しています。 POSIX 仕様には、マルチスレッド、ネットワーク、正規表現などのヘッダー ファイルが含まれています。 これらは、多くの場合、C 標準ライブラリの機能と並行して実装されており、その近さの度合いはさまざまです。 たとえば、glibc はforkなどの関数を実装していますlibc.soが、NPTLが glibc に統合される前は、独自のリンカー フラグ引数を持つ別のライブラリを構成していました。 多くの場合、この POSIX 指定の機能はライブラリの一部と見なされ、基本的な C ライブラリは ANSI またはISO C ライブラリとして識別されることがあります。
BSD ライブラリ
BSD libc は、FreeBSD、NetBSD、OpenBSD、macOSなどのBSD オペレーティング システムに含まれる C ライブラリによってサポートされている POSIX 標準ライブラリのスーパーセットです。BSD libc には、元の標準では定義されていない拡張機能がいくつかあり、その多くは 1994 年の4.4BSDリリース (1989 年に最初の標準が発行されてから大幅に開発された最初のリリース) で初めて登場しました。BSD libc の拡張機能の一部は次のとおりです。
sys/tree.h–赤黒木とスプレー木 の実装を含む[19] [20]sys/queue.h–リンクリスト、キュー、テールキューなど の実装[21] [22]fgetln()– で定義されていますstdio.h。これを使用して、ファイルを1行ずつ読み込むことができます。[23] [24] [25]fts.h– ファイル階層を走査するいくつかの関数を含む[26] [27]db.h– Berkeley DB に接続するためのいくつかの機能[28] [29]strlcat()およびstrlcpy()–strncat()およびの安全な代替手段strncpy()[30] [31] [32] [33] [34]err.h– フォーマットされたエラーメッセージを印刷するためのいくつかの関数が含まれています[35] [36]vis.h–vis()関数が含まれています。この関数は、印刷できない文字を視覚的な形式で表示するために使用されます。[37] [38] [39]
他の言語のC標準ライブラリ
一部の言語では、標準 C ライブラリの機能が独自のライブラリに含まれています。ライブラリは言語の構造に合わせて調整される場合もありますが、操作上の意味は同様のままです。
C++
C++言語は、C 固有の機構を除いて、C 標準ライブラリの構成要素の大部分を独自に組み込んでいます。C 標準ライブラリ関数は、2 つの方法で C++ 標準ライブラリからエクスポートされます。
Cおよび標準以前のC++との後方互換性/相互互換性のために、関数はCと同様にC標準ヘッダー名を ing した後、グローバル名前空間(::)でアクセスできます。[40]したがって、C++98プログラム#include
#include <stdio.h> int main () { return :: puts ( "Hello, world!" ) == EOF ; }
C95プログラムと(明らかに)同一の動作を示すはずである
#include <stdio.h> int main ( void ) { return puts ( "Hello, world!" ) == EOF ; }
C++98以降では、対応する C ヘッダーの代わりにヘッダーをインクルードすることで、C 関数も名前空間::stdでも使用できるようになりました(例: C printfは C++ ::std::printfとして、atoi は::std::atoiとして、feof は::std::feofとして)。例: <cstdio> は<stdio.h>の代わりになり、<cmath> は<math.h>の代わりになります。C++ ヘッダー名には.h拡張子が付かないことに注意してください。
<chdrname><hdrname.h>
したがって、上記の 2 つと同等の (一般的に好ましい) C++≥98 プログラムは次のようになります。
#include <cstdio> int main () { return std :: puts ( "Hello, world" ) == EOF ; }
mainの上または内部で宣言
を発行すると、::std::プレフィックスを自動的に適用できますが、グローバル名前空間を汚染するため、ヘッダー内でグローバルに使用することは一般的に推奨されません。[41]using namespace ::std
C++≥98バージョンのCのヘッダーのいくつかが欠落しています。たとえば、C≥11の<stdnoreturn.h>と<threads.h>にはC++の対応するものがありません。[42]
その他は、 C95 <iso646.h>の<ciso646> ( C++20まで)のようにプレースホルダーに縮小され、その必要なマクロはすべて C++98 でキーワードとしてレンダリングされます。C 固有の構文構造は、ヘッダーがサポートされていても、通常はサポートされません。[43]
いくつかのCヘッダーは主にC++との互換性のために存在し、C++では空に近い傾向があります。たとえば、C99 – 17 <stdbool.h>では、
#define bool _Bool
#define false 0
#define true 1
#define __bool_true_false_are_defined 1
これは、C++98 のbool、false、およびtrueキーワードを C でサポートしているように見せかけるためです。C ++11 では互換性のために<stdbool.h>と<cstdbool> が必要ですが、これらで定義する必要があるのは__bool_true_false_are_definedだけです。C23では、古い_Boolキーワードが廃止され、新しい C++98 と同等のbool、false、およびtrueキーワードが採用されているため、C≥23 と C++≥11 の<stdbool.h> / <cstdbool>ヘッダーは完全に同等です。(特に、C23 では<stdbool.h>に__STDC_VERSION_BOOL_H__マクロは必要ありません。)
Cライブラリ関数へのアクセスは、名前空間::stdとC++≥98ヘッダー名を介して行うのが望ましい。採用を促進するため、C++98はC( *.h )ヘッダー名を廃止しているため、C互換性ヘッダーを使用すると、特に厳格なC++ 98–20プリプロセッサが何らかの診断メッセージを表示する可能性がある。しかし、 C++23は(異例なことに)これらのヘッダーを廃止しないため、新しいC++実装/モードでは、特に要求されない限り、エラーは発生しないはずである。[44]
他の言語でも同様のアプローチが採用されており、 C 互換関数/ルーチンを共通の名前空間に配置します。これには、D、Perl、Ruby などがあります。
パイソン
CPythonには、独自の共通ライブラリにいくつかのCライブラリ関数のラッパーが含まれており、ctypesパッケージを介してC関数と変数へのより直接的なアクセスも許可されています。[45]
より一般的には、Python 2.xでは組み込みのファイルオブジェクトは「Cのstdioパッケージ[46]を使用して実装されている」と規定されており、 C標準ライブラリの動作が頻繁に参照されています。利用可能な操作(open、、など)は、対応するC関数( 、、など)と同じ動作をすることが期待されています。
readwritefopenfreadfwrite
ただし、 Python 3の仕様は、Python 2に比べて C 仕様への依存度がかなり低くなっています。
さび
Rustは、さまざまなC標準(およびその他の)ライブラリ関数と型定義を使用できるようにするcrate libcを提供しています。 [47]
他の言語の標準ライブラリとの比較
C 標準ライブラリは、他の言語の標準ライブラリと比較すると小さいです。C ライブラリは、数学関数、文字列操作、型変換、ファイルおよびコンソールベースの I/O の基本セットを提供します。C ++標準テンプレート ライブラリのような「コンテナー型」の標準セットは含まれません。完全なグラフィカル ユーザー インターフェイス(GUI) ツールキット、ネットワーク ツール、およびJavaと.NET Frameworkが標準として提供するその他の豊富な機能は言うまでもありません。標準ライブラリが小さいことの主な利点は、ISO C 環境を提供することが他の言語よりもはるかに簡単で、その結果、C を新しいプラットフォームに移植することが比較的簡単であることです。
参照
注記
- ^ のよく知られた脆弱性を悪用するMorris ワームは
gets()、1988 年にはすでに作成されていました。 - ^ C標準ライブラリでは、文字列の長さの計算と文字列の末尾の検索には線形時間の計算量があり、同じ文字列や関連する文字列を繰り返し使用すると非効率的です。
参考文献
- ^ ISO / IEC (2018). ISO/IEC 9899:2018(E): プログラミング言語 - C §7
- ^ 「GNU C ライブラリ – はじめに」gnu.org . 2013 年 12 月 5 日閲覧。
- ^ 「C 標準ライブラリと C POSIX ライブラリの違い」。stackoverflow.com . 2012 . 2015 年 3 月 4 日閲覧。
- ^ 「C 標準」。C : C 標準。Keil。2011年11 月 24 日閲覧。
- ^ 「Re: Newlib は mmu なしの CPU をサポートしていますか?」 Cygwin.com。2006 年 3 月 23 日。2008 年 11 月 22 日時点のオリジナルよりアーカイブ。2011年10 月 28 日閲覧。
- ^ "musl libc". Etalabs.net . 2011年10月28日閲覧。
- ^ GCCが提供するその他の組み込み関数、GCCマニュアル
- ^ 「cc でコンパイルする」 。2013年 3 月 2 日閲覧。
- ^ Weimer, Florian. 「c - libm はどのような機能を目的としているのか?」. Stack Overflow . 2021 年2 月 24 日閲覧。
- ^ 「c99 - 標準 C プログラムをコンパイルする」。The Open Group 基本仕様第 7 号、2018 年版。The Open Group。2021年2 月 24 日閲覧。
- ^ 「musl FAQ」。www.musl-libc.org 。 2021年2月24日閲覧。
- ^ 「ISO/IEC TR 24731-1: C ライブラリの拡張、パート I: 境界チェック インターフェイス」(PDF) . open-std.org. 2007-03-28 . 2014-03-13に取得。
- ^ 「ISO/IEC WDTR 24731-2: C ライブラリの拡張、パート II: 動的割り当て関数」(PDF) . open-std.org. 2008-08-10 . 2014-03-13に閲覧。
- ^ C コードで TR 24731 の「安全な」関数を使用していますか? - Stack Overflow
- ^ 「Austin Group による ISO/IEC WDTR 24731 のレビュー」 。2011年10 月 28 日閲覧。
- ^ 「附属書Kのフィールド経験—境界チェックインターフェース」 。 2024年10月9日閲覧。
- ^ 「CRT のセキュリティ機能 - 非推奨の警告の排除」。2023 年 2 月。2024 年10 月 9 日に閲覧。
- ^ 「math_error - 数学関数のエラー検出」man7.org 2008-08-11 2014-03-13閲覧。
- ^ "tree". Man.freebsd.org . 2007-12-27 . 2013-08-25閲覧。
- ^ 「スーパーユーザーのBSD相互参照: /OpenBSD/sys/sys/tree.h」。bxr.su。
- ^ "queue". Man.freebsd.org . 2011-05-13 . 2013-08-25閲覧。
- ^ 「スーパーユーザーのBSD相互参照: /OpenBSD/sys/sys/queue.h」。bxr.su。
- ^ "fgetln". Man.freebsd.org . 1994-04-19 . 2013-08-25閲覧。
- ^ 「スーパーユーザーのBSD相互参照: /OpenBSD/lib/libc/stdio/fgetln.c」。bxr.su。
- ^ 「スーパーユーザーのBSD相互参照: /OpenBSD/include/stdio.h」。bxr.su。
- ^ "fts". Man.freebsd.org . 2012-03-18 . 2013-08-25閲覧。
- ^ 「スーパーユーザーのBSD相互参照: /OpenBSD/include/fts.h」。bxr.su。
- ^ "db". Man.freebsd.org . 2010-09-10 . 2013-08-25閲覧。
- ^ 「スーパーユーザーのBSD相互参照: /OpenBSD/include/db.h」。bxr.su。
- ^ Miller, Todd C. および Theo de Raadt。strlcpy および strlcat - 一貫性のある安全な文字列のコピーと連結。1999 USENIX 年次技術会議の議事録、1999 年 6 月 6 ~ 11 日、pp. 175 ~ 178。
- ^ 「スーパーユーザーのBSD相互参照: /OpenBSD/lib/libc/string/strlcat.c」。bxr.su。
- ^ 「スーパーユーザーのBSD相互参照: /OpenBSD/lib/libc/string/strlcpy.c」。bxr.su。
- ^ 「スーパーユーザーのBSD相互参照: /OpenBSD/lib/libc/string/strncat.c」。bxr.su。
- ^ 「スーパーユーザーのBSD相互参照: /OpenBSD/lib/libc/string/strncpy.c」。bxr.su。
- ^ "err". Man.freebsd.org . 2012-03-29 . 2013-08-25閲覧。
- ^ 「スーパーユーザーのBSD相互参照: /OpenBSD/include/err.h」。bxr.su。
- ^ "vis(3)". Man.FreeBSD.org . 2013年9月14日閲覧。
- ^ 「スーパーユーザーのBSD相互参照: /OpenBSD/lib/libc/gen/vis.c」。bxr.su。
- ^ 「スーパーユーザーのBSD相互参照: /OpenBSD/include/vis.h」。bxr.su。
- ^ C++ 標準ライブラリ ヘッダー - C 互換性ヘッダー、2024 年10 月 9 日取得
- ^ Kieras, David (2015 年 2 月 15 日). 「"using" の使用: std 名前空間の使用方法」(PDF) . EECS381 配布資料. EECS 部門、ミシガン大学。2022年 12 月 24 日時点のオリジナルからアーカイブ(PDF)されています。2024年10 月 9 日に取得。複雑なプロジェクト内の 1 つのヘッダー ファイル内の
1 つの
ステートメントによって、プロジェクト全体の名前空間管理が混乱する可能性があります。したがって、
ヘッダー ファイルには
最上位レベルの [ ] ステートメントを使用しないでください。
using namespace std;using namespace - ^ 「C++ 標準ライブラリ ヘッダー - サポートされていない C ヘッダー」。2024 年10 月 9 日閲覧。
- ^ 「C++ 標準ライブラリ ヘッダー - 意味のない C ヘッダー」 。2024年10 月 9 日閲覧。
- ^ 「C++ 標準ライブラリ ヘッダー - C 互換性ヘッダー」 。2024年10 月 9 日閲覧。
- ^ 「ctypes—Python 用の外部関数ライブラリ」。docs.python.com。2024年10 月 9 日閲覧。
- ^ 「Python 標準ライブラリ、§5.9: ファイルオブジェクト」。2024 年10 月 9 日閲覧。
ファイルオブジェクトは C の
stdio
パッケージを使用して実装されており、組み込み
関数を使用して作成できます。
open() - ^ 「Crate libc」。Rust Crates 。 2024年10月9日閲覧。
さらに読む
- Plauger, PJ (1992)。標準 C ライブラリ(第 1 版)。Prentice Hall。ISBN 978-0131315099。
外部リンク
- C ライブラリリファレンスガイド
- どのヘッダーがどの標準に該当するかを示す便利なリスト
- MSDN のカテゴリ別 Microsoft Universal C ランタイム ルーチン
- NetBSD C ライブラリマニュアル 2015-12-23 にWayback Machineでアーカイブされ、完全な C ライブラリソース
- Unix のオリジナル C 標準ライブラリのマニュアル ページ
