9

/* comment */すべての C スタイル コメント ( ) を C++ スタイル コメント ( )に自動的に置き換えるにはどうすればよい// commentですか?

これは、複数のファイルで自動的に行う必要があります。それが機能する限り、どのような解決策でも問題ありません。

4

12 に答える 12

17

このツールは仕事をします: https://github.com/cenit/jburkardt/tree/master/recomment

RECOMMENT は、C スタイルのコメントを C++ スタイルのコメントに変換する C++ プログラムです。

また、他の人が言及した重要なケースもすべて処理します。

このコードには、フロリダ州メルボルンの JDS Uniphase の Steven Martin によって 2005 年 4 月 28 日に提供された提案とコーディングが組み込まれています。これらの提案により、プログラムは文字列の内部コンテンツ (コメントの開始または終了のように見える可能性があります) を無視し、末尾のコメントを含むコード行を処理し、末尾のコード ビットを含むコメントを処理できます。

于 2009-02-12T17:44:44.223 に答える
12

これは些細な問題ではありません。

int * /* foo 
  /* this is not the beginning of a comment.

int * */ var = NULL;

それを何に置き換えたいですか?実際の置換では、行を分割する必要がある場合があります。

int * // foo
  // this is not the beginning of a comment.
// int *
var = NULL;
于 2009-02-12T16:17:04.857 に答える
5

次のような状況にどのように対処するつもりですか。

void CreateExportableDataTable(/*[out, retval]*/ IDispatch **ppVal)
{
 //blah
}

括弧内のコメントに注意してください...これは、生成されたコードで物事を文書化したり、クラスの実装でデフォルトのパラメーター値に言及したりする一般的な方法です。私は通常、そのようなコメントの使用のファンではありませんが、は一般的であり、考慮する必要があります。よく考えないと C++ スタイルのコメントに変換できないと思います。

于 2009-02-12T16:17:43.277 に答える
4

私はあなたの質問にコメントした人々と一緒です。なぜそれをするのですか?放っておきなさい。

時間を浪費し、バージョン管理に無駄なコミットを追加し、失敗するリスクがあります

編集:OPのコメントから詳細を追加

C++ スタイルのコメントを好む基本的な理由は、コメントが含まれている可能性のあるコード ブロックをコメント アウトできることです。そのコメントが C スタイルの場合、このコードのブロック コメント アウトは簡単ではありません。– 不明 (yahoo)

それは公正/良いことかもしれませんが、それについて2つのコメントがあります:

  • 私は、既存のコードをすべて変更することを提唱する人を誰も知りません。それは、新しいコードの優先事項です。(IMO)
  • 「コードをコメントアウトする」必要があると感じた場合 (別のあいまいな慣行)、必要に応じてそれを行うことができます。

また、コードのセクションをブロックするために C スタイルのコメントを使用したいと思われますか? それとも // を使用して多くの行をブロックしますか?

1 つの代替手段は、その状況のプリプロセッサ #ifdef です。私はそれにうんざりしていますが、行/ブロックをコメントアウトするのと同じくらい悪いです. どちらも製品コードに残すべきではありません。

于 2009-02-12T16:44:02.810 に答える
2

これは、(ほとんど) ジョブを実行する Python スクリプトです。ほとんどのエッジ ケースを処理しますが、文字列内のコメント文字は処理しませんが、これは簡単に修正できるはずです。

#!/usr/bin/python

import sys

out = ''
in_comment = False

file = open(sys.argv[1], 'r+')
for line in file:
    if in_comment:
        end = line.find('*/')
        if end != -1:
            out += '//' + line[:end] + '\n'
            out += ' ' * (end + 2) + line[end+2:]
            in_comment = False
        else:
            out += '//' + line
    else:
        start = line.find('/*')
        cpp_start = line.find('//')
        if start != -1 and (cpp_start == -1 or cpp_start > start):
            out += line[:start] + '//' + line[start+2:]
            in_comment = True
        else:
            out += line

file.seek(0)
file.write(out)
于 2009-02-12T16:25:47.970 に答える
0

独自のソースファイルを解析するCアプリを作成してみませんか?比較的簡単な正規表現クエリで/*コメント*/セクションを見つけることができます。次に、改行文字を改行文字+"//"に置き換えることができます。

とにかく、ただの考え。それで頑張ってください。

于 2009-02-12T16:10:29.067 に答える
0

Cソースファイルを処理するアプリケーション/スクリプトを作成する場合は、次の点に注意してください。

  • 文字列内のコメント文字
  • 行の途中にあるコメント文字(コード行を分割したくない場合があります)

コードをコードとして実際に解析する方法を理解しているアプリケーションを見つけようとする方がよい場合があります。

于 2009-02-12T16:17:05.777 に答える
0

「いくつかのファイル」しかない場合、本当にプログラムを書く必要がありますか?コメントがたくさんない限り、テキストエディタで開くと、実際にはもっと速くトリックが実行される可能性があります。emacsにはcomment-region(当然のことながら)リージョンにコメントするコマンドがあるので、問題のある「/*」と「*/」を捨てる場合にすぎません。

于 2009-02-12T16:17:08.367 に答える
0

あなたが試してみたいと思うかもしれないいくつかの提案があります:

a)コメントを置き換えるために、独自のコード(C / Python /任意の言語)を記述します。正規表現が言ったこと、またはこの素朴な解決策が「うまくいくかもしれない」という線に沿った何か:[1つのrmeadorのようなケースを除いて、Darronは投稿しました]

 
ファイル内の行の場合:
    line [0] == "\ *"の場合:
       buf ='//'+'\*'を除く行のすべての文字
       フラグ=True
    フラグ=Trueの場合:
       行が「*/」で終わる場合:
          取り除きます '*/'
          フラグ=False
       '//'+行をbufに追加します

b)それを行うためのツールを見つけます。(見つけたら、調べて投稿します。)

c)ほとんどすべての最新のIDE(使用している場合)またはテキストエディタには、自動コメント機能があります。次に、各ファイルを手動で開き、コメント行を選択し、状況の処理方法を決定し、アクセラレータ(Ctrl + Mなど)を使用してC++スタイルにコメントを付けることができます。次に、もう一度自分の判断で、すべての「/*」と「*/」を「検索して置換」するだけです。「CodeComment」プラグインを使用してこれを行うようにGeditを構成しました。Vimで行った方法を覚えていません。これは簡単に見つけることができると確信しています。

  • 于 2009-02-12T16:27:27.543 に答える
    0

    非常に古い質問ですが、「純粋なemacs」を使用してこれを達成しました。要するに、ソリューションは次のようになります。

    実行しますM-x query-replace-regexp。プロンプトが表示されたら、入力します

    /\*\(\(.\|^J\)*?\)*\*/
    

    検索する正規表現として。これ^Jは改行であり、^Q(ほとんどのキーボードでは Ctrl+Q) を押してから Enter キーを押すことで入力できます。次に入力します

    //\,(replace-regexp-in-string "[\n]\\([ ]*?\\)   \\([^ ]\\)" "\n\\1// \\2" \1))
    

    置換表現として。

    基本的には、入れ子になった 2 つの正規表現検索を使用するという考え方です。主なものは単に C スタイルのコメントを見つけるだけです (*?熱心な繰り返しはこのために非常に便利です)。次に、elisp 式を使用して、コメント テキスト内のみで2 回目の置換を実行します。この場合、改行とそれに続くスペースを探し、最後の 3 つのスペース文字を に置き換えます//。これは、コメントの書式を維持するのに便利です (ただし、すべてのコメントがインデントされている場合にのみ機能します)。

    二次正規表現を変更すると、このアプローチは他の場合でも機能するようになります。たとえば、

    //\,(replace-regexp-in-string "[\n]" " " \1))
    

    元のコメントの内容全体を単一の C++ スタイルのコメントに入れるだけです。

    于 2014-03-12T13:58:53.600 に答える
    -3

    PHPチームの慣習から...質問が尋ねられた場合、何らかの理由が存在する必要があります。知っているだけで答えてください。

    C++ スタイルのコメント ( // コメントなど) は使用しないでください。代わりに、常に C スタイルのコメントを使用してください。PHP は C で書かれており、ANSI-C 準拠のコンパイラでコンパイルすることを目的としています。多くのコンパイラは C コードで C++ スタイルのコメントを受け入れますが、コードが他のコンパイラでもコンパイルされることを確認する必要があります。この規則の唯一の例外は、Win32 固有のコードです。これは、Win32 ポートが MS-Visual C++ 固有であり、このコンパイラは C コードで C++ スタイルのコメントを受け入れることが知られているためです。

    于 2014-04-02T16:05:50.277 に答える