为什么 Ubuntu 上的 gcc 不会针对 -Wnon-literal-null-conversion 发出警告,但在 macOS 上却不会发出警告?

问题描述 投票:0回答:1

我遇到了这个问题,我不知道如何评估它,因为我刚刚开始学习C和gcc。 我创建了一个函数来返回以

null
结尾的字符串数组。字符串以
'\0'
终止,但数组也以
'\0'
终止。这是工作很好,因为它没有在 Ubuntu 上用标志
-Wall -Werror -Wextra
警告我,但是当我在 macOS 上尝试它时,它无法编译(
expression which evaluates to zero treated as a null pointer constant of type 'char *' [-Werror,-Wnon-literal-null-conversion]
)。

因此,我了解了

'\0'
0
(
NULL
) 之间的区别以及为什么我应该用
NULL
终止数组。 我的问题是如何在 Ubuntu 上也能捕获它?哪些默认设置造成了它们之间的差异?

gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0

Apple clang version 15.0.0 (clang-1500.1.0.2.5)

c macos ubuntu gcc compilation
1个回答
0
投票

macOS 上默认的 gcc 与 linus 上的 gcc 的行为不同,因为它是完全不同的编译器:如

--version
输出所示,macOS 上的 gcc 默认情况下是 clang 的别名。

clang 作为 X-Code 的一部分安装,并支持 gcc 的大部分警告,等等。默认设置有些不同,因此您可能会在 mac 上收到一条警告,提示您无法使用 gcc 在 linux 上获得。

我强烈建议您在 Makefile 中使用 gcc -Wall -Wextra -Werror 启用更多警告,以在编译时捕获许多微妙和不那么微妙的问题。 clang 还支持 -Weverything 但某些额外级别的分析可能有点令人讨厌。

© www.soinside.com 2019 - 2024. All rights reserved.