0
std::string systemStr = "C:\\gcc1\\gccxml.exe ";
    systemStr += "\"" ;
    systemStr += argv[1] ;
    std::cout<<"Header File is:"<<argv[1]<<endl;

上記のコードスニペットでは、argv[1]はヘッダーファイルの名前を表します。このヘッダーファイルを開いて、存在する可能性のある#ifdefsを検索したいと思います。どうすればこれを行うことができますか?問題は、argv[1]が文字列であるということです。不明な点がありましたらごめんなさい。

4

2 に答える 2

1

これを行う最も簡単な方法は、シェルスクリプトを使用することです。

     cat header.h | grep -n "^[:space:]*#[:space:]*if[n]*def"

これにより、行番号と#ifdefまたは#ifndefが表示されます。

Cプログラム内からこれを行う必要がある場合は、いつでもシェルスクリプトを実行できます。

于 2012-07-27T12:10:40.443 に答える
1

このようなものはどうですか...

std::cout<<"Header File is:"<<argv[1]<<endl;

std::ifstream file(argv[1]);
int lineNum = 0;
bool hasIfdef = false;

while( file.good() )
{
    std::string line;
    std::getline( file, line );
    lineNum++;

    if( line.find("#ifdef") != std::string::npos ||
        line.find("#ifndef") != std::string::npos )
    {
        std::cout << "Line " << lineNum << ": " << line << std::endl;
        hasIfdef = true;
    }
}
于 2012-07-26T22:54:56.640 に答える