0

SO、AIX7 (64 ビット) ボックスでいくつかのレガシー C コードをコンパイルするように依頼されました。

そして、使用されているコンパイラーを編集するためのメイクファイル (gcc から xlc_r へ) と、フラグを (-DAIX3 から -DAIX7 へ) に変更しました。

ただし、このばかげたことのおかげで、不平を言うエラーが発生しています

    xlc_r -c -q64 -O -DAIX -DAIX7  log.c
  "log.c", line 128.7: 1506-343 (S) Redeclaration of log_write differs from previous declaration on line 140 of "lib.h".
  "log.c", line 128.7: 1506-378 (I) Prototype for function log_write cannot contain "..." when mixed with a nonprototype declaration.
  "log.c", line 165.7: 1506-343 (S) Redeclaration of log_errno differs from previous declaration on line 141 of "lib.h".
 "log.c", line 165.7: 1506-378 (I) Prototype for function log_errno cannot contain "..." when mixed with a nonprototype declaration.
 make: 1254-004 The error code from the last command is 1.

方法は次のような質問です

  extern  void    log_write _PROTO(( int, char *, ... ));
  extern  void    log_errno _PROTO(( int, char *, ... ));

... が何であるかを知りたいのですが、それはパラメータのオープンリストになりますか? また、これを AIX7 で実行するにはどうすればよいですか?

4

1 に答える 1

2

関数の宣言または定義の省略記号 (...) は、関数が可変数 (0 個以上) のパラメーターを受け入れることを示します。

ANSI 準拠前のコンパイラと ANSI 準拠のコンパイラの両方を使用してコードをコンパイルする必要があることが一般的だった時代に戻ると、C 言語の 2 つのフレーバー間の関数宣言の違いを処理するための頻繁なアプローチは、条件付きでマクロを定義することでした。マクロ定義の変更による ANSI スタイルの宣言または K&R スタイルの宣言。あなたの例で使用されている _PROTO() マクロは、プロトタイプを使用した ANSI スタイルの宣言ではなく、K&R スタイルの宣言を持つように定義されていると思われます。これを修正すると、これらのコンパイルの問題に対処できる可能性があります。

于 2012-08-17T19:30:33.360 に答える