2011-08-01 7 views
2

네임 스페이스 선언을 추가 할 C++ 파일이 많이 있다고합니다. 즉 파일을 다음과 같이 표시하고자합니다 :많은 파일에 네임 스페이스 선언 추가?

//pre-processor commands and other stuff not in the namespace 
namespace foo 
{ 
    //previously existing code 
} 
//EOF 

각 파일을 수동으로 열지 않아도됩니다. 필자가 지금까지 생각해 낼 수 있었던 가장 좋은 방법은 각 파일에 대해 이맥스 매크로를 사용하는 것이지만 여전히 각 파일을 처리해야합니다.

+0

변경하지 않고 모든 파일을 변경 하시겠습니까? –

+2

이렇게하려면 코드를 작성하십시오. –

+1

이 질문은 C++과 관련이 없으며 'C++'또는 'namespaces'태그가 있어야합니다. – bitmask

답변

4
#!/bin/bash 
for f in *.h 
do 
    line=`grep -n '^#' $f | tail -1 | cut -f1 -d:` 
    head -$line $f > tempfile 
    echo 'namespace foo {' >> tempfile 
    let line++ 
    tail --lines=+$line $f >> tempfile 
    echo '} // end namespace foo' >> tempfile 
    mv tempfile $f 
done 

이 현재 디렉토리에있는 각 헤더 파일을 통해 이동 한 것이다

  • ('#'로 시작하는 일명 라인) 마지막 전처리 라인을 찾을 수의 첫 번째 부분을 덤프 임시 파일
  • 에 파일은
  • 추가 린 기존 파일의 나머지 부분을 추가 네임 스페이스
  • 를 열려면 줄을 추가 전자는 임시 파일과 파일을 대체 당신이 너무 CPP 파일을 공격하려는 경우, 첫 번째 라인은 for f in *.h *.cpp 할 필요가 있다는

참고 네임 스페이스

  • 를 닫습니다. 하지만 cpp 파일에 정적 함수 나 익명의 네임 스페이스가있는 경우에는 작동하지 않습니다.

    헤더 파일이 기본 포함 가드로 보호되지 않는다고 가정합니다. 모든 전처리 기 명령이 파일의 맨 위에 있다고 가정합니다. 그렇지 않은 경우 조정을해야합니다. 파일 중 일부를 사용해보고 필요에 따라 조정하고 몇 가지 방법을 시도해보십시오.

  • 관련 문제