C でライブラリ関数を使用せずに、文字、文字列、または変数の値をどのように出力しますか?

標準 C では、できません。 C で定義されている唯一の I/O は、C 標準ライブラリ関数によるものです。

特定のプラットフォームでは、それを行う方法があるかもしれません:

  • カーネル呼び出しを直接行う。これを行うには、おそらくインライン アセンブリを作成する必要があります。 litb の write を作成できます C ライブラリを使用せずに直接呼び出します。 C ライブラリのソースを入手して、その方法を確認してください。
  • フレーム バッファに直接書き込みます。多くの場合、マルチユーザー OS ではこれが許可されていません (少なくともライブラリ/カーネルの呼び出しは行わないでください)。

独自の C ライブラリを作成している場合を除き、なぜこれを行う必要があるのか​​わかりません。


Linux では、write を使用できます。 システムコール:

write(1, "hello\n", 6); // write hello\n to stdout

十分に理解できない場合は、システムコールを一般的に呼び出して、1 段階低くすることができます。

syscall(__NR_write, 1, "hello\n", 6);

strace について知っておく価値があります を使用して、特定のプログラムの実行中にどのシステムコールが使用されているかを確認できます。ただし、「いくつかの単純なパーサー」の場合、生のシステム コールを使用する必要はほとんどないことに注意してください。 c ライブラリの関数を使用することをお勧めします。

ところで、C 標準ライブラリを使用せずに Windows で上記を実行する場合は、WriteFile および GetStdHandle 関数に注意してください。ただし、Linux ソリューションほどではありません。


質問の下にあるハオ氏からのコメントで、簡単な回答が1つ見つかりました。彼の答えは、このような単純なプログラムです

ターボ C (DOS プログラム):

char far* src = (char far*) 0xB8000000L; 
*src = 'M'; 
src += 2; 
*src = 'D'; 

またはこれを試してみてください:http://en.wikipedia.org/wiki/Brainfuck :) – //Hao (1 時間前)

Turbo Cで試してみましたが、うまくいきました。このような簡単な解決策が欲しかったので、正解として受け入れたかったのですが、彼(ハオ)がコメントとしてくれたので、他のユーザーが代わりにこれについて知ることができるようにここに貼り付けました彼の、そしてそれを受け入れました。もう一度、ハオさんに感謝します。