1

まだいくつかのほこりっぽいコーナーがある古いCコードで作業しています。#ifdefオペレーティングシステムやアーキテクチャなどを参照し、移植性のためにコードを変更するステートメントをたくさん見つけています。これらのステートメントのどれだけが今日でも関連しているのかわかりません。

特定の状況ではそれが最善のアイデアではないことはわかってい#ifdefます。必ず修正しますが、ここで興味があるのは、テストされているものです。

以下にリストしました。それらのいずれかがこの時代に間違いなく役立つかどうか、またはそれらが関連付けられているマシンまたはOSが長い間期限切れになっている場合は、それは素晴らしいことです。また、これらの中心的な参考資料をご存知の場合は、ぜひお知らせください。

よろしくお願いします、ロス

BORLANDC
BSD
CGLE
DRYRUN
HUGE
IBMPC
MAIN
M_XENIX
OPTIMIZED
P2C_H_PROTO
sgi
TBFINDADDREXTENDED
UNIX
vms
__GCC__
__GNUC__
__HUGE__
__ID__
__MSDOS__
__TURBOC__
4

6 に答える 6

7

はい、どうぞ。

于 2010-07-08T14:20:53.243 に答える
3

あなたは間違った方向から来ています。どのコードを安全に削除できるかを尋ねる代わりに、どのコードを残す必要があるかを尋ねる必要があります。

どのプラットフォームをサポートする必要があるかを調べ、それらのいずれにも定義されていないものをすべて削除します。動作が保証された、可能な限りクリーンなコードを手に入れることができます。

于 2010-07-08T14:21:32.693 に答える
2

あなたは間違った人々に尋ねています:私たちではなく、あなたのユーザー(または潜在的なユーザー)がまだ有用なものを決定します。サポートする必要のあるプラットフォームを見つけることから始めて、次に、必要のないものを見つけることができます。

たとえば、16ビットシステムをサポートする必要がない場合は、、、、およびを省略__HUGE__でき__MSDOS__ます__TURBOC__

于 2010-07-09T06:52:18.153 に答える
2

このコードはどのようなコンテキストで使用されていますか?

  1. 組織外の他の人が使用しているライブラリである場合は、新しいバージョンをリリースして一部の OS のサポートを明示的に削除しない限り、このようなものに触れないでください。後者の場合、新しいリリースの一部として関連するすべての IFDEF コードを削除し、何を削除するかを明示する必要があります。
  2. 組織内の人が使用しているライブラリの場合は、私たちではなく、何を削除できるかをその人に尋ねてください。
  3. コードが非常に狭い範囲で使用されている場合 (つまり、その使用を直接制御している場合)、必要に応じて、コンパイラの移植性を安全に削除できます。これは、使用するコンパイラが 1 つだけであるためです。
于 2010-07-08T14:30:11.813 に答える
1

#ifdef実装によって提供される任意のプリプロセッサ定義に基づくものはすべて古くなっています。特に、実装ではなく、アプリケーション用に予約された名前空間にあるものはほとんどありません。この種の移植性を達成するための最新の正しい方法は、configure スクリプトなどを使用してさまざまなインターフェイス/機能/動作の存在を検出#define HAVE_FOOし、それに基づいて標準のプリプロセッサ定義を直接テストする (UINT_MAX整数サイズを決定するなど)、および/またはのいずれかです。適切なHAVE_FOO定義を使用して、サポートする各プラットフォーム用のビルド済みヘッダー ファイルを提供します。

古いスタイルの「移植性」#ifdefは、ソース全体のすべての単一プラットフォームの知識と密接に結びついており、プラットフォームが変更され、新しい機能、動作、またはデフォルトが採用されたときに悪夢を引き起こします。(Windows が 16 ビットであるか、Linux が SysV スタイルであると想定する古いコードの混乱を想像してみてくださいsignal()!) 最新のスタイルでは、プラットフォームの知識が分離され、ソース ファイルの条件付きコンパイルが、使用したい機能。

于 2010-07-08T14:21:52.043 に答える
1

そのように注釈が付けられたコードは、実際には保守が非常に困難になる可能性があります。autotools などを調べて、特定のアーキテクチャ用にソースを構成することを検討できます。

于 2010-07-08T14:22:26.377 に答える