【解決方法】古いスタイルの C 関数定義のコンバーター


こんにちは、

私は 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 の両方に問題があるため、どちらかを使用する場合は注意が必要です。

コメント

タイトルとURLをコピーしました