6

http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.htmlの GCC ドキュメントでは-ffreestanding、独立した環境は-fno-builtin. フリースタンディング環境とは何か、またはそれがどのように機能するかを正確に誤解している可能性がありますが、ビルトインは通常、ライブラリ関数を呼び出す代わりにインライン コードを発行するため、標準ライブラリが欠落している可能性があるフリースタンディング環境には理想的であるように思えます。機能がないか、完全に欠落している場合さえあります。

では、自立型環境でビルチンを使用したくないのはなぜでしょうか?

4

1 に答える 1

19

フリースタンディング モードでは、コンパイラは意味論的な考慮事項に依存できません。

GCC のほとんどのビルトインは黙って動作します。たとえば、コンパイラは を使用していることを認識し、ホスト モードでは、 を使用しているときに文字列を正確にコピーしようとしているstrcpy()と推測する場合があります。次に、拡張的に同等のビルトインにstrcpy()置き換えることができます。これは、指定されたターゲットが文字列をコピーするのに適しています。strcpy

自立モードでは、strcpy()機能を使用することは何でも意味します。アイデアは、リンケージに標準ライブラリが存在しないということではありません。独立モードの考え方は、float.h、iso646.h、limits.h、stdarg.h、stdbool.h、stddef.h、stdint.h (C99 標準 4.6) を除いて、定義レベルでも標準ライブラリがないということです。 . フリースタンディング モードでは、ハード ドライブを でフォーマットすることを決定できますがstrcpy、これは C 言語では完全に合法です。したがって、コンパイラはビルトインの使用方法を認識せず、それらの使用をまったく拒否します。

于 2013-09-10T07:52:29.280 に答える