0

所以,我被要求在 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

函数声明或定义中的省略号 (...) 表示函数接受可变数量(零个或多个)的参数。

早在需要使用 pre-ANSI 和符合 ANSI 的编译器编译代码很常见的日子里,处理两种 C 语言之间函数声明差异的常用方法是有条件地定义一个宏,它可以允许通过更改宏定义来进行 ANSI 风格的声明或 K&R 风格的声明。我怀疑您的示例中使用的 _PROTO() 宏被定义为具有 K&R 样式的声明,而不是带有原型的 ANSI 样式的声明,修复此问题可能会解决这些编译问题

于 2012-08-17T19:30:33.360 回答