[ad_1]
こんにちは、
私は 6 年間、巨大なレガシー ソフトウェアに取り組んでいます。
この SW には、多くのパラメーターを備えた古いスタイルの c 関数が何千も含まれています。
ここでは、いくつかのパラメータを使用した例を示します。
old_function (x,y,z) int x; int y; int z; { // some code return (0); }
入社当初はコードを削除して変更しました
丸括弧の間で ; を置き換えます。 による 、:
old_function (int x, int y, int z) { // some code return (0); }
その時は知らなかったのですが、パラメータは次のように交換できるということです。
old_function (x,y,z) int y; int x; int z; { // some code return (0); }
ここで私の修正方法は x と y を入れ替えることになり、これは致命的です。
プログラムが未定義の動作を示したため、後でこれに気づきました。
私の変化の一つによって。
しかし、私は以前に最大 20 個のパラメーターを含む数百の関数をすでに変更しました。
したがって、今必要なのは、変更を加えずにすべてのコードを解析し、古いスタイルの関数定義を見つけてレポートするパーサーです。
パラメータを交換しました。
そのようなツールが存在するかどうか知っている人はいますか? または、使用できる C または C++ コード
ベースとして使用し、ニーズに応じて変更しますか?
ありがとう、そしてbr
キリスト教徒
私が試したこと:
手作業でやり始めました。 🙁
解決策 1
最善の策は、改訂版を破棄して、元のバージョンに戻すことです。 その後、定義をリファクタリングする必要がある場合は、すべての関数を手動でチェックするのではなく、元の動作バージョンからそれを行うコードを作成します。
現在のバージョンを修正する既存のソフトウェアを私は知りません。そのため、あなたがそれを作成する必要があります。これは、既知の正常なバージョンに戻す作業の 2 倍の作業です。
解決策 2
以前は、K&R 関数定義を ANSI に変換するのに役立つ protoize という GCC とともに配布されるユーティリティがありました。 ただし、2005 年頃に遡る gcc 4 頃に廃止されたようです。問題に関する情報がここにあります。 プロトイズに関する注意事項[^] 特別な手段がない場合は、ソース ツリーから protoize を抽出してコンパイルしてみることもできるかもしれません。 cproto もあります: CPROTO – 関数プロトタイプの生成[^] プロジェクトは廃止されたように見えますが、ソース コードを追跡できる可能性があります。 私の知る限り、cproto と protoize の両方に問題があるため、どちらかを使用する場合は注意が必要です。
[ad_2]
コメント