
Cソースファイルと関数名、構造、列挙型、またはその他の名前を取得して要素がある場合は、要素のすぐ上にコメントを出力する簡単なユーティリティを実装したいと思います。
つまり。
/* This is a doc comment
* I want this comment extracted
*/
void function_foo(){
}
使用法:
utility file.c function_foo
出力:
This is a doc comment
I want this comment extracted
これのユースケースは、ソースファイルの機能ドキュメントを処理するためにemacsでorg-babelを使用したいということです。たぶんこれを行うことができるdoxygenツールやclangツールがありますか?まだ見つからなかっただけです。最終結果は、他のコンテンツを含む文書構成ファイルのコードから直接取得した最新の文書を簡単に維持できることです。
答え1
努力する:
utility() {
FUNC=$2 perl -l -0777 -ne '
if (
m{
^ /\* \s* ((?s:(?!\*/).)*?) \s* \*/ \s* \n
(?:\w.*\h)? \Q$ENV{FUNC}\E \h* \(
}mx
) {
$comment = $1;
$comment =~ s/^\s*\*\s*//gm;
print $comment
}' < "$1"
}
関数呼び出しの偽の肯定を避けるために、コメントと関数定義が行の先頭(先行スペースなし)にあるとします。
今、車輪を再発明する前に、次のことを検討することをお勧めします。doxygen
これはコードベースの文書化のためのフレームワークを提供します。