GCC在Mac OS X上编译程序,但在具有clang的Ubuntu上编译

时间:2015-12-16 20:06:57

标签: linux macos gcc compilation clang

我试图在学校的Mac OS X上使用标志“-Wall -Wextra -Werror”编译一个文件并且它工作正常但是当我回家并在ubuntu上尝试相同的事情时它会给我这个错误:< / p>

tests/00_part1_ft_memset.spec.c: In function ‘unittest1’:
tests/00_part1_ft_memset.spec.c:9:12: error: ‘memset’ used with constant zero length parameter; this could be due to transposed parameters [-Werror=memset-transposed-args]
  mt_assert(memset(b1, 99, 0) == ft_memset(b1, 99, 0));

为什么它在2个不同的操作系统上的工作方式不同,是否可以让我的ubuntu像OS X一样反应?是否有配置文件?

3 个答案:

答案 0 :(得分:3)

  

为什么它在两个不同的操作系统上的工作方式不同?

因为他们使用不同的编译器。

Clang不是gcc 。虽然clang旨在与gcc选项兼容,但它也实现了自己的一组警告。

您得到了您的要求:-Wall -Wextra -Werror启用大量警告使其致命。  你最好的选择可能是有选择地禁用memset -traposed-args警告。或者修改/调整代码。

错误消息指向问题,0为memset的第三个arg。

答案 1 :(得分:3)

我打赌你真的不是这个意思吗?

memset(b1, 99, 0);

这意味着您要将下一个0字节设置为(unsigned char)99 那没什么价值......

你可能意味着:

memset(b1, 0, 99); // to set the next 99 bytes to the value 0

答案 2 :(得分:0)

好的,正如Jens所说,你不是在处理相同的编译器,因此功能可能会有所不同。

因此,作为duoquadra,我理解你想要实现的目标。

尝试添加

#pragma GCC diagnostic ignored "-Wmemset-transposed-args"

在测试主程序的顶部,它应该使用此显式名称禁用所有警告,并仍然使用-Wall -Wextra -Werror进行编译。