2013-08-27 3 views
1

의견에서 doxygen 주석을 사용하여 일부 C 소스 코드를 상속 받았습니다. 비트 썩음으로 인해 \return 주석에 대한 일부 주석이 거짓으로 표시됩니다. 즉, 함수가 void를 반환하도록 변환되었지만 \return 주석이 여전히 존재하고 그렇지 않은 경우입니다.doxygen return 문이 올바른지 확인하는 방법은 무엇입니까?

예 :이 너무입니다

/*! 
* \brief The foo function 
* \return OK if successful, ERROR otherwise 
*/ 
void foo(void) 
{ 
    ... 
} 

가 지금은 모든 파일을 찾고 싶어요. grep/sed/awk/perl을 사용하여 \return을 찾은 다음 void으로 시작하는 다음 줄을 인쇄 할 것을 생각했습니다. 간단한

grep -E '(\\return|^void)' file ... 

도 비공 각 기능의 모든 내용을 인쇄합니다. 나는 쉬운 방법이 있다고 확신한다 ^void 라인이 보이면 이전의 \return 라인을 인쇄한다.

+0

내 질문에 잘못된 점을 자세히 설명해 주시겠습니까? – Jens

답변

2

당신의 기능과 위의 의견을 모두 당신이 게시 스타일을 따르는 경우에 이것은 당신이 필요로하는 모든 수 있습니다 :

awk '/\\return/{cmt=$0} /^[[:alpha:]]/{ if (/^void/ && cmt) print cmt ORS $0; cmt=""}' file 

예 :

$ cat file 
/*! 
* \brief The foo function 
* \return OK if successful, ERROR otherwise 
*/ 
void foo(void) 
{ 
    ... 
} 

/*! 
* \brief The bar function 
* \return OK if successful, ERROR otherwise 
*/ 
int bar(void) 
{ 
    ... 
} 

$ awk '/\\return/{cmt=$0} /^[[:alpha:]]/{ if (/^void/ && cmt) print cmt ORS $0; cmt=""}' file 
* \return OK if successful, ERROR otherwise 
void foo(void) 
1
#! /usr/bin/env perl 

use strict; 
use warnings; 

my $prev_return; 

while (<>) { 
    # assume letter in first column introduces a function return type 
    if (my($return_type) = /^([^\W\d]\w*)/) { 
    if ($return_type eq "void" && defined $prev_return) { 
     print $prev_return; 
    } 
    undef $prev_return; # reset after each function definition 
    } 
    elsif (/\\return\b/) { 
    $prev_return = "$ARGV:$.: $_"; 
    } 
} 
continue { 
    close ARGV if eof; # reset $. at the end of each named file 
} 

참고 : 패턴 [^\W\d] 사용 숫자가 아닌 "단어 문자"인 double-negative technique, 문자와 밑줄입니다.

샘플 출력 :

$ cat file.c 
/*! 
* \brief The foo function 
* \return OK if successful, ERROR otherwise 
*/ 
void foo(void) 
{ 
    ... 
} 

\return fdsklj 
void bar(void) 

void baz 

$ ./doxygen-return-void file.c 
file.c:3: * \return OK if successful, ERROR otherwise 
file.c:10: \return fdsklj

펄의 <>, 또한 다이아몬드 연산자로 알려진, 쉽게 유닉스 스타일의 필터를 작성합니다. 즉, 원하는만큼 경로를 지정할 수 있습니다.

$ ./doxygen-return-void file.c file.c 
file.c:3: * \return OK if successful, ERROR otherwise 
file.c:10: \return fdsklj 
file.c:3: * \return OK if successful, ERROR otherwise 
file.c:10: \return fdsklj

위의 프로그램도 표준 입력을 사용하지만 출력은별로 유용하지 않습니다.

$ cat file.c | ./doxygen-return-void 
-:3: * \return OK if successful, ERROR otherwise 
-:10: \return fdsklj
관련 문제