問題タブ [c-standard-library]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - std 名前空間に表示される C コンストラクトは?
C 標準ライブラリ ヘッダー<foo.h>
を C++ に含めるための推奨される方法は、対応する C++ ヘッダーを含めること<cfoo>
です。
私の経験に基づくと、これにより、対応する C 構造の一部std
が名前空間に配置されますが、その他はグローバル スコープに配置され、場合によっては両方の場所 (つまり、std
名前空間とグローバル スコープ) に表示されます。
これは、コンパイラ (グローバル スコープでsize_t
のみインクルードするのが好きなstd
人もいれば、グローバル スコープで常にインクルードする人もいます) とコンストラクト (たとえば、assert
とを含むにも関わらず名前空間error
に表示されないように見えるもの) の両方に依存します。std
cassert
cerrno
std
標準には何が必要ですか? また、名前空間内または名前空間外の場所に関連して、C コンストラクトに移植可能にアクセスするための簡単な規則はありますusing namespace std
か?
この質問は同じ根拠をカバーしていますが、そこにある答えはすでにcfoo
すべてを入れている私の理解を反映していますstd
- しかし、なぜそのようなものが表示されないassert
のか、そして類似の完全なリストを知る方法についての質問には答えていません「例外」。errno
std
c - C標準ライブラリでメモリストリームを使用する目的は何ですか?
C 標準ライブラリで、メモリ ストリームを使用する目的は何fmemopen()
ですか? 配列を直接操作する場合と比べてどうですか?
c - 標準関数へのポインタが等しくないことを保証しますか?
C言語は、異なる名前の標準関数へのポインターが等しくないことを保証しますか?
6.5.9 等値演算子、 ¶6 、
2 つのポインターが等しく比較されるのは、両方が null ポインターであり、両方が同じオブジェクト (オブジェクトへのポインターとその先頭のサブオブジェクトを含む) または関数へのポインターである場合に限られます。
getc==fgetc
エイリアス (「同じ関数」の複数の識別子) が標準関数に許可されていると主張する解釈を見たことを思い出したようですputc==fputc
。しかし、どこで見たのかわかりませんし、そのコンセプトには懐疑的です。
この可能性に賛成または反対する公式の解釈または広く受け入れられている議論はありますか?
c - ソケットと対話する C 標準 I/O ストリームに制限があるのはなぜですか?
本の CSAPP セクション 10.9 では、標準 I/O ストリームに 2 つの制限があり、ソケットの制限とうまく相互作用しないと書かれています。
制限 1: 出力関数の後に入力関数。入力関数は、fflush、fseek、fsetpos、または rewind の呼び出しを介在させなければ、出力関数の後に続くことはできません。fflush 関数は、ストリームに関連付けられたバッファーを空にします。後の 3 つの関数は、Unix I/O lseek 関数を使用して現在のファイル位置をリセットします。
制限 2: 入力関数の後に出力関数。入力関数がファイルの終わりに遭遇しない限り、出力関数は、fseek、fsetpos、または rewind への介入呼び出しなしでは、入力関数の後に続くことはできません。
しかし、なぜ制限が課せられたのかわかりません。では、私の質問は次のとおりです。この 2 つの制限の原因は何ですか?
「ソケットでlseek関数を使用することは違法です。」とも書かれていますが、それが本当なら現在のファイル位置をリセットするためにどのようにfseek
使用できますか?fsetpos
rewind
lseek
ここに同様の質問がありますが、私の質問はこれとは異なります。