2

特定のプログラムにコメントを出力して、コンソールに出力したいですか?

プログラムでコメントを出力する関数と独自のロジックはありますか?

例えば

 int main()
 {
   /* this is a comment */
 }

上記のプログラムにはコメントが1つしかありません.Cにある場合、特定のロジックまたは関数によってこのコメントをコンソールに出力したいですか?

4

10 に答える 10

8

c個のソースファイルを読み取り、これらのファイル内のコメントを識別して印刷するプログラムを作成する必要があります。

#include <stdio.h>

void read_until_char (FILE *f, char c) {
   // read file until c is found 
}

void read_until_char_into (FILE *f, char c, char *buf) {
   // read file until c is found
   // also write each char read into buffer 
}

void print_comments(const char *filename) {
  FILE *f = fopen(filename, "r");
  char buffer[2048];
  int c;
  if (f) {
    while (!feof(f)) {
      read_until_char(f, '/');
      c = fgetc(f);
      if (c == '*') {
        while (!feof(f)) { 
          read_until_char_into(f, '*', buffer);
          if ((c=fgetc(f)) == '/') { 
            // print buffer 
            break;
          } else if (c == '*') { 
            // consider what to do if c is *
          }
        }
      } else if (c == '/') {
         read_until_char_into(f, '\n', buffer);
         // print buffer
      }
    }
    fclose(f);
  }
}
于 2012-08-28T12:19:40.803 に答える
4

独自のソースコードにアクセスできないコンパイル済みのCプログラムは、コメントを印刷できません。コメントはCプリプロセッサによって削除され、コンパイラによっても表示されません。つまり、プログラムが実行可能になると、コメントテキストは使用できなくなります。

これが、ソースコードを何らかの方法で直接処理する必要がある理由です。プログラム自体の実行時にこれを行うことはできません。

于 2012-08-28T12:24:58.483 に答える
1

これは、ソースコードファイルからコメントを抽出できるawkスクリプトです。

于 2012-08-28T12:23:00.907 に答える
1

おそらく、質問を逆にすることができます。文字列 (印刷可能) をコメントとして使用しないのはなぜですか? コメントのポイントは、

  • かなり自由な形式のテキストを保持できます。
  • ソースコードを見ると、人間はそれを読むことができます。

文字列リテラルには、これらの両方の特性があります。

したがって

void a_function()
{
    docstring = "This string is a comment. Blah blah.";
    printf("DOC %s", docstring);
}

(Python には非常によく似た規則があり、これが「docstring」という名前を取得する場所です)。

于 2012-08-28T14:00:15.547 に答える
0

C ソース ファイルからすべての /* */ コメントを削除するにはどうすればよいですか? を参照してください。次に、生成されたファイルと元のファイルの差分を作成します。

于 2012-08-28T12:28:41.497 に答える
0

この質問について私は非常に混乱しています。すべてのコメントを印刷したい場合、コメントの代わりに文字列を使用しないのはなぜですか? または両方?プログラムのコメントを印刷する必要があるのはなぜですか? ここで何をしようとしているのかわからないので、疑問に思っています。おそらく、あなたがやろうとしていることを達成するためのより良い方法があるでしょう.

動作しprintf("/*foo*/");ないか何か?それとも、これを自動化しようとしていますか?

後者の場合は、プログラムでソース ファイルを解析し、コメントを検索する必要があります (他に簡単な魔法の方法がない限り)。

に遭遇するまで C ファイルを char/*ごとに読み取り、次の*/.

何らかの理由で問題が前者であり、何らかの理由でコメントを出力できない場合はprintf、コメント文字列を作成するために私が書いた関数を次に示します (99% を使用できると確信しているので、非常に無意味ですprintf("/*foo*/").

int printcomment(const char *comment)
{
    char *commentln, open[] = "/*", close[] = "*/";
    if(!(commentln = malloc(strlen(comment) + 5))) return 0;
    strcat(commentln, open);
    strcat(commentln, comment);
    strcat(commentln, close);
    printf("%s", commentln);
    free(commentln);
    return 1;
}

幸運を。

于 2012-08-28T14:14:44.703 に答える
0

と呼ばれる一種のプログラムです。Quine

C の例:

main(){char *c="main(){char *c=%c%s%c;printf(c,34,c,34);}";printf(c,3
4,c,34);}

http://en.wikipedia.org/wiki/Quine_(コンピューティング)

于 2012-08-28T12:42:54.727 に答える