c - 在 AIX 7 上编译 C 代码时出错

标签 c makefile aix xlc

SO,我被要求在 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 上运行?

最佳答案

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

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

关于c - 在 AIX 7 上编译 C 代码时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12011438/

相关文章:

c - 运行 c 程序 - stdio.h 我从哪里得到它?

c++ - 从现有目标文件创建共享库

java - ClassCastException 是由 Just In Time 中的错误引起的吗?

shell - 如何在shell脚本中使日期/时间可读且可计算?

c - 岩浆2.0错误: CUDA driver version is insufficient for CUDA runtime version

c++ - 从源代码构建 QT 项目时出错

C编程...链表指针迭代

c - 如何在 AIX 中使用 GCC 编译器链接 *.so 文件

c - 一次从文件中读取 2 行,然后在 C 中交替将两行合并为一行

c - 如何清除 UNIX 系统上 tty 输入队列中的未读数据?