【问题标题】:GCC Compiler - potential difference between Code Blocks and Mac OSX (XCode)?GCC 编译器 - 代码块和 Mac OSX (XCode) 之间的潜在区别?
【发布时间】:2013-05-30 06:15:19
【问题描述】:

最近,我的朋友让我帮他完成他的编码任务。我尝试编译他的 C 代码以帮助他完成调试过程,但它没有编译,而是返回以下错误:

作业 3.c:12:错误:“随机”的类型冲突

/usr/include/stdlib.h:224: 错误:先前的“随机”声明在这里

作业 3.c:51:错误:“随机”类型冲突

/usr/include/stdlib.h:224: 错误:先前的“随机”声明在这里

所以,我明白这意味着在 stdlib.h(头文件)中已经定义了一个“随机”函数,但我不明白为什么它为他编译得非常好。不同之处在于他使用的是代码块,而我使用的是我的 Mac OSX 终端 (GCC)。据我所知,两者都使用 GCC 编译器,所以我想知道为什么会有差异。任何澄清都会很棒。谢谢!

更新: 一些代码示例来解释错误。此处显示的 random() 用于第 12 行。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void readColsRows(int* cols, int* rows);
int** allocMemory(int* minima, int* maxima,int rows, int cols);
void random(int*** table, int rows, int cols);
void maxMinFinder(int** table, int* minima, int* maxima,int rows, int cols);
void printTable(int** table, int rows, int cols);

我不想把所有代码都放在这里,因为它是用于家庭作业的。 :X 但是,我认为乔纳森·莱弗勒 (Jonathan Leffler) 在下面的 cmets 中可能已经回答了我的问题。谢谢!

【问题讨论】:

  • “random”是否存在于您朋友的“/usr/include/stdlib.h”副本中?
  • 哦,stdlib.h可以跨不同的副本有不同的功能?
  • 在您显示的代码中没有任何名为 random 的内容。而且它没有 12 行,那么第 12 行怎么会出错呢?请向我们提供帮助您所需的信息。
  • 您的代码显示random1(),但问题讨论的是random()...这是您为使其工作而修改的代码的黑客版本吗? POSIX(或至少是单一 Unix 规范)定义了一个由系统库提供并在 &lt;stdlib.h&gt; 中声明的函数 random()。因此,您必须关闭 POSIX 源函数以避免冲突。许多代码对函数使用系统前缀,以避免与其他机器上的系统库中的函数发生冲突。重命名可能是最好的。
  • 谢谢乔纳森。我相信这就是我正在寻找的答案。对于我的问题中的所有错误和困惑,我深表歉意。感谢您的帮助!

标签: c macos gcc compilation codeblocks


【解决方案1】:

你几乎给自己答案:

标准库(如 /usr/include/stdlib.h 第 224 行所示)将 random 定义为

long     random(void);

而你这样做:

void random(int*** table, int rows, int cols);

显然,编译器标记了冲突。选择其他名称。该问题与代码块无关。

【讨论】:

  • 感谢您的回复。 :D 我认为乔纳森回答了上面 cmets 中的问题。 :)
【解决方案2】:

在 Mac 上,某些头文件包含其他操作系统不包含的其他头文件。例如,如果您在 Mac 上包含 iostream,则也包含 stdlib.h。在 Linux 上,情况并非如此。

【讨论】:

  • 我认为情况并非如此,因为 stdlib 是直接包含在内的。 :X
猜你喜欢
  • 2017-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
相关资源
最近更新 更多