私はこの会社でレガシー C++ プロジェクトを再コンパイルするという使命を持っており、32 ビットの chroot を作成した後、依存関係をコンパイルするなどの退屈な作業をすべて行った後、ほとんどのファイルが標準の例外クラスを使用していることが最終的にわかりました。 「using namespace std」を追加したり、「std::」をプレフィックスとして付けたりしません。
すべてのファイルをバッチで変更するための簡単な sed スクリプトを作成しました。しかし、交換が希望どおりにならない場合があります。私のスクリプトは次のようなものです:
sed -r 's/(catch.*)[^std::](exception)/\1 std::\2/' File.cpp
しかし、それを実行すると、次のような結果が得られます (置換のみを grep します):
}catch std::exception& e){
}catch(const std::exception& e){
}catch(const std::exception& e){
元の行は次のとおりです。
}catch(exception& e){
}catch(const exception& e){
}catch(const exception& e){
したがって、キャッチの後に "(exception" が続くと問題が発生し、(const ...) が続くと正常に動作します
最初の後方参照式の ( を "(catch.*\()" に変更して) に一致させようとすることで、正規表現を少し変更しようとしましたが、それでも機能しません。
誰でも私に手を貸してくれますか?
ありがとう