我试图在学校的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一样反应?是否有配置文件?
答案 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进行编译。