14

putchar(char)文字を標準出力に書き込み、通常は によって提供されstdio.hます。

または他の標準ライブラリファイルを使用せずに標準出力に文字を書き込むにはどうすればよいですかstdio.h(つまり、 :s は許可されません)。 #include

putchar(char)または別の言い方をすれば、ゼロ#includeステートメントで独自のものを実装するにはどうすればよいですか?

これは私が達成したいことです:

/* NOTE: No #include:s allowed! :-) */ 

void putchar(char c) {
  /*
   * Correct answer to this question == Code that implements putchar(char).
   * Please note: no #include:s allowed. Not even a single one :-)
   */
}

int main() {
  putchar('H');
  putchar('i');
  putchar('!');
  putchar('\n');
  return 0;
}

説明:

  • 注意: #include:s は使用できません。1つもありません:-)
  • ソリューションは移植可能である必要はありませ(したがって、インライン アセンブラーは問題ありません) が、MacOS X で gcc を使用してコンパイルする必要があります。

正解の定義:

  • 作業putchar(char c)機能。それ以上でもそれ以下でもありません:-)
4

4 に答える 4

8

Linux や OSX などの POSIX システムでは、次のwriteシステム コールを使用できます。

/*
#include <unistd.h>
#include <string.h>
*/

int main(int argc, char *argv[])
{
    char str[] = "Hello world\n";

    /* Possible warnings will be encountered here, about implicit declaration
     * of `write` and `strlen`
     */
    write(1, str, strlen(str));
    /* `1` is the standard output file descriptor, a.k.a. `STDOUT_FILENO` */

    return 0;
}

Windows にも同様の機能があります。おそらく、でコンソールを開いてからOpenFile使用する必要がありますWriteFile

于 2013-01-12T18:02:54.353 に答える
7
void putchar(char c) {
  extern long write(int, const char *, unsigned long);
  (void) write(1, &c, 1);
}
于 2013-01-12T18:58:23.137 に答える
6

これを行うプラットフォームに依存しない方法はありません。

もちろん、指定されたプラットフォームでは、実装を再実装/コピーアンドペーストすることでこれを簡単に実現できますstdio.h(およびこれが依存するものはすべて)。しかし、これは移植性がありません。また、役に立ちません。

于 2013-01-12T18:02:31.623 に答える
0

完全なソリューションを提供することはおそらくスポーツに反するので、これは次善の策です...これはAppleの実装のソースコードです-これはオープンソースです.

これを最小限のケースに減らすことは、OPの演習だと思います。Apple は親切にも XCode プロジェクト ファイルを提供してくれました。

于 2013-01-12T18:39:57.387 に答える