【问题标题】:Compiling error on OSX but not on Windows or Linux在 OSX 上编译错误,但在 Windows 或 Linux 上没有
【发布时间】:2015-03-04 17:59:22
【问题描述】:

我有一个 C 程序,我可以使用 Code Block(我相信它使用 GCC 编译器)在 Windows 上编译它,并使用终端 gcc 编译器在 Linux 上编译它。我尝试在 OSX 上使用 eclipse、mac 的代码块、终端 gcc 甚至 Qt 编译它,但它们都给了我同样的错误集:

hw1.c:9:19: error: conflicting types for 'mergesort'
struct listnode * mergesort(struct listnode *data)
                  ^
/usr/include/stdlib.h:281:6: note: previous declaration is here
int      mergesort(void *, size_t, size_t,
         ^
hw1.c:27:25: error: too few arguments to function call, expected 4, have 1
        ahead = mergesort(ahead);
                ~~~~~~~~~      ^
/usr/include/stdlib.h:281:1: note: 'mergesort' declared here
int      mergesort(void *, size_t, size_t,
^
hw1.c:28:25: error: too few arguments to function call, expected 4, have 1
        bhead = mergesort(bhead);
                ~~~~~~~~~      ^
/usr/include/stdlib.h:281:1: note: 'mergesort' declared here
int      mergesort(void *, size_t, size_t,
^
hw1.c:68:25: error: too few arguments to function call, expected 4, have 1
   node = mergesort(node);
          ~~~~~~~~~     ^
/usr/include/stdlib.h:281:1: note: 'mergesort' declared here
int      mergesort(void *, size_t, size_t,
^

【问题讨论】:

  • <stdlib.h>系统头文件中似乎已经声明了一个mergesort函数,该函数的声明方式与您的函数不同。您可能会考虑重命名您的函数?
  • 可能,因为它不是标准的 C(或 POSIX)函数,可能有一些预处理器宏来禁用它。读取头文件。
  • 哇,我更改了函数的名称,它起作用了!

标签: c macos gcc


【解决方案1】:

这很可能是由于 git。

stdlib.h 在 OS X 上已经有一个名为 mergesort 的方法,因此您不能在代码中声明该方法。

我建议将 mergesort 的名称更改为其他名称,例如 myMergesort(或类似的名称)。

来源: See here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-25
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多