私は、このコマンドを使用して、GCCのソースコードをダウンロードしている:私に言うことができるGCCのソースコードでstrncpy()関数の実装はどこにありますか?
svn checkout svn://gcc.gnu.org/svn/gcc/trunk SomeLocalDir
は私が)(標準ライブラリ関数のstrncpyの実装を見つけることができますか?
ありがとうございます。
私は、このコマンドを使用して、GCCのソースコードをダウンロードしている:私に言うことができるGCCのソースコードでstrncpy()関数の実装はどこにありますか?
svn checkout svn://gcc.gnu.org/svn/gcc/trunk SomeLocalDir
は私が)(標準ライブラリ関数のstrncpyの実装を見つけることができますか?
ありがとうございます。
gcc
は、strncpy
のソースを実際には含んでいません。gcc
には標準ライブラリコードではなく、コンパイラコードが含まれています。
あなたは、GNU libcの(glibcでは)からソースをしたい:
これはglibcの中strncpy.c
の現在のトランクの実装へのリンクです。
代わりにlooking in glibcをお寄せください。
はstrncpyは、Cランタイムライブラリに属しているので、あなたの代わりにGCC(コンパイラ)のglibcの中でそれを見つけることができます。
標準のCライブラリでstrncpy
が実装されているという点で、これらの回答は正しいです。 しかし、の場合、gccには、strncpy
が1である中間コードとして、リンクされた関数呼び出しではなくコンパイラによって生成される可能性のあるbuiltin関数があります。これらは、で明示的に無効にすることができます。
gccソースツリーでは、コード生成パターンはgcc/builtins.c
とgcc/builtins.def
にあります。中間表現でインスタンス化されることにより、はるかに積極的な最適化が可能になり、コールオーバーヘッドがなくなります。
gccソースではなくlibcになります。http://sourceware.org/git/?p=glibc.git;a=blob_plain;f=string/strncpy.c;hb=HEAD – Anycorn
[これを読む](http://the-flat-trantor-society.blogspot.com/2012/03/no-strncpy-is-not-safer-strcpy.html)したい。 –
gccは通常、OSが提供するライブラリを使用します。 Linuxシステムではglibcです。他のほとんどのシステムでは、それは他のものになります。 –