什么是gcc编译器选项“-unsigned”意味着什么?

时间:2016-10-17 18:48:10

标签: c++ c gcc g++

我正在使用RHEL7上的gcc编译器4.8.5编译遗留代码。所有C和C ++文件都有“-unsigned”作为gcc和g ++编译的默认标志之一。编译器接受此选项并成功编译。但是,我无法在gcc手册或在线任何地方找到此选项的任何文档。有谁知道这个选项是什么?我必须移植代码,并且对这个编译器选项是否需要被移植感到困惑。

2 个答案:

答案 0 :(得分:4)

我怀疑这只是Makefile中的一个错误,或者用于编译代码的任何错误。

gcc不支持-unsigned选项。但是,它确实将选项传递给链接器,GNU ld有-u选项:

  

' -u SYMBOL'
  ' - 未定义= SYMBOL'
       强制SYMBOL作为未定义输入到输出文件中        符号。例如,这样做可以触发附加的链接        标准库中的模块。 ' -u'可以重复        输入其他未定义符号的不同选项参数。        此选项相当于' EXTERN'链接器脚本命令。

-u和符号名称之间的空格是可选的。

所以意图可能是用无符号类型做某事,但至少在现代版本的gcc中,效果是在输出文件中输入nsigned作为未定义的符号。

这似乎对我做的快速测试没有任何影响(编译和运行一个小小的"你好,世界"程序)。程序运行正常,nm hello的输出包括:

                 U nsigned

在不同系统上使用旧版本的gcc(2.95.2)时,我会收到有关未定义符号的致命链接时错误。

答案 1 :(得分:0)

我怀疑打算用-funsigned-char编译程序。我不知道这曾经是-unsigned,回到恐龙时代,也许海湾合作委员会实际上仍然需要注意拼写;没有办法从手册中知道,因为如果有的话,它是一个没有记录的功能。

我在这里问原作者的意图,因为他们认为不适合记录。