我最近做了一个 cp 克隆(用于大学),我碰巧发现了一些我从未有机会发现的东西。
这至少适用于编译 C 源代码的 GCC。
我在 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 中却看到了?
Ubuntu 强制执行一些 CFLAGS,如您所见 here
我是一名优秀的程序员,十分优秀!