【问题标题】:Error while compiling C code on AIX 7在 AIX 7 上编译 C 代码时出错
【发布时间】:2012-08-14 05:39:02
【问题描述】:

所以,我被要求在 AIX7(64 位)机器上编译一些遗留的 C 代码。

而且,我刚刚更改了 makefile 以编辑所使用的编译器(从 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 上运行?

【问题讨论】:

    标签: c makefile aix xlc


    【解决方案1】:

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

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

    【讨论】:

    • 做到了,感谢您解释省略号是什么,我什至不知道该怎么称呼它,而且它没有出现在谷歌搜索中。
    猜你喜欢
    • 2011-04-04
    • 2012-04-05
    • 2011-01-22
    • 2023-03-09
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    相关资源
    最近更新 更多