1

我最近做了一个 cp 克隆(用于大学),我碰巧发现了一些我从未有机会接触到的东西。

这至少适用于 GCC 编译 C 源代码。

我在 Mac OS X (10.6.4) 中完成了这个特定 C 程序的主要开发,使用 Apple 构建/usr/bin/gcc --version

i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5664)
Copyright (C) 2007 Free Software Foundation, Inc.

但是,我在 Mac 中的 Arch Linux 虚拟机中运行了测试,使用了最新的 gcc(没有添加、没有自定义、没有像 Apple 那样的模块)

gcc (GCC) 4.5.1
Copyright (C) 2010 Free Software Foundation, Inc.

我们必须在我们拥有的 Ubuntu 10.04.1 LTS 的类中构建它。

我的 Makefile 是这样的:

CC=gcc
#CFLAGS=-O0 -g -Wall
CFLAGS=-O3 -Wall -finline-functions
EXE=copy

compile:
    $(CC) $(CFLAGS) -o $(EXE) main.c

所以,我总是在-Wall启用的情况下运行(在每个操作系统中)gcc。Mac 和 Arch 从未显示任何警告。

Ubuntu打印了两个警告,有和没有 -Wall

do_copy.c: In function 'do_copy_file2file':
do_copy.c:27: warning: ignoring return value of 'realpath', declared with attribute warn_unused_result
do_copy.c: In function 'do_copy_symlink2file':
do_copy.c:117: warning: ignoring return value of 'symlink', declared with attribute warn_unused_result

Ubuntu 的 GCC 版本是该发行版的默认版本: gcc (Ubuntu 4.4.3-ubuntu5) 4.4.3

为什么会这样?

为什么我在其他两个操作系统和 Ubuntu 中看不到任何警告?

4

1 回答 1

1

如您在此处看到的,Ubuntu 强制执行一些 CFLAGS

于 2010-11-30T20:30:02.337 回答