質問

グローバルネームスペース C stdlib 関数を含めることに本当に悩まされ、:: snprintfまたは:: errnoまたはstruct :: statのようなものを書くことになりましたなど、それらのc stdlib関数が使用されたエンクロージング名前空間のいくつかの独自の関数と区別するため。

次に、std名前空間内のすべてのC stdlib関数を(STLとして)宣言する方法があることを発見しました。 c(lib)<!> gt;代わりに<!> lt; (lib).h <!> gt;そのため、新しい<!> quot; c for c ++ <!> quotを使用するようにコードを編集しました。含む。

Debian / GCC 4.3.4 では、2つの問題がありました:

1) #errorこのファイルには、今後の\のコンパイラとライブラリのサポートが必要です ISO C ++標準、C ++ 0x。このサポートは現在実験的であり、\ -std = c ++ 0xまたは-std = gnu ++ 0xコンパイラオプションで有効になります。

2) -std = c ++ 0xを使用すると、プログラムは正常にコンパイルされますが、:: snprintfや:: timeなどは変更していません。すべてのC stdlib関数はまだグローバル名前空間=(!(いいえ、私は名前空間stdを使用していません一度もありません)

何か考えはありますか

たとえば.. c stdlibがグローバル名前空間に侵入するのを止める方法は? <!> lt; c(lib)<!> gt;は次のC ++標準の実験的な機能ですか、それとも今すぐ安全に使用できますか?

次に、おそらく新しい質問に値するという疑問があります。cmallocはありません。私は、mallocを新しく置き換えることに関するすべての歴史とその理由を知っています。しかし、単純なプレーンバイトバッファの場合、 realloc に相当するc ++はありません。私は、メモリブロックと再割り当てが実装/特定のものであることを知っていますが、メモリ再割り当ての連続した空きブロックがある場合、新しいバッファ割り当てとメモリコピーよりもうまく機能します。

ありがとう=)!

役に立ちましたか?

解決

最初の質問では、どのヘッダーを含めるかによって異なります。ほとんどのCヘッダーは、既存のバージョンのC ++ではc(lib)形式で使用できます。いくつかはそうではなく、C ++ 0xで追加される可能性があります。そのため、これらのいずれかを含めようとした場合、そのエラーが発生した可能性があります。

第二に、このフォームのすべてのヘッダーは、std名前空間で機能が使用可能になることを保証します。しかし、グローバル名前空間をそのままにすることを約束しません。多くの場合、両方のネームスペースにシンボルを配置します。

なぜ::snprintfstd::snprintfよりも煩わしいのかわかりません。どちらの場合もプレフィックスを指定する必要があります。

reallocに関しては、C ++に相当するものは存在しません。おそらく、C ++がオブジェクトをコピーするためのより複雑なセマンティクスで、それが価値以上に面倒だからです。 (特に、使用しようとする場合は、バッファに非PODオブジェクトを格納しないでください。必要に応じてmemcpyは新しく割り当てられたバッファに<=>するだけで、非PODオブジェクトが壊れます。 )

もちろん、ヘッダーを含めることでCの古い<=>を引き続き使用できます。ただし、おそらく、new / deleteを使用して、適切なバッファ割り当て戦略を見つけ出す方が良いでしょう。

他のヒント

標準Cのmalloc()関数は、<!> quot; <malloc.h> <!> quot;で宣言されていません。ヘッダ。 <stdlib.h>で宣言されています。 realloc()およびfree()についても同じです。

C ++については知りませんが、代わりに

#include <cmalloc>

試用

#include <cstdlib>
namespace std { }で<!> lt; lib <!> gt; .hを大まかに囲む

c <!> lt; lib <!> gt;は、C ++の標準機能です。いずれかの標準にアクセスできる場合は、<!>#167; 17.4.1.2を参照してください。

これは実験的な機能ではありません。どのヘッダーファイルが互換性の問題を引き起こしていますか?

mallocなどの使用うまくいきますが、決してそれらをnew / deleteと混ぜないでください。 (たとえば、delete malloc() 'edバッファーを使用しないでください。)

いくつかの標準C <!> lt; lib.h <!> gt; <!> lt; clib <!> gt;にまだ転送されていないヘッダー。 <!> lt; cstdint <!> gt;を使用した可能性があります。またはどこかに似ています。

現在の標準では、こちらにリストされているcライブラリがあります。 <!> lt; cstdint <!> gt; その一部ではない

<!> lt; cstdint <!> gt;の場合とタイミングを説明するリファレンスが見つかりませんでした。 c ++の一部になりますが、含めると、-std = c ++ 0xを使用する必要があることを示すエラーメッセージも表示されるため、次のc ++標準に含める予定であると想定しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top