Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么是gcc编译器选项-“未签名”;是为了什么?_C++_C_Gcc_G++ - Fatal编程技术网

C++ 什么是gcc编译器选项-“未签名”;是为了什么?

C++ 什么是gcc编译器选项-“未签名”;是为了什么?,c++,c,gcc,g++,C++,C,Gcc,G++,我正在RHEL7上使用gcc编译器4.8.5编译遗留代码。所有的C和C++文件都有“无符号”作为GCC和G++编译的默认标志之一。编译器接受此选项并成功编译。但是,我在gcc手册或在线上找不到关于此选项的任何文档。有人知道这个选项是什么吗?我必须移植代码,并且不知道是否需要移植此编译器选项。我怀疑其目的是为了编译程序。我不知道这在恐龙时代是否曾经是无符号的,也许GCC仍然注意到这种拼写;没有办法从手册中知道,因为如果它知道,它是一个未记录的功能 我想在这里询问原作者的意图,因为他们认为这不适合文

我正在RHEL7上使用gcc编译器4.8.5编译遗留代码。所有的C和C++文件都有“无符号”作为GCC和G++编译的默认标志之一。编译器接受此选项并成功编译。但是,我在gcc手册或在线上找不到关于此选项的任何文档。有人知道这个选项是什么吗?我必须移植代码,并且不知道是否需要移植此编译器选项。

我怀疑其目的是为了编译程序。我不知道这在恐龙时代是否曾经是无符号的,也许GCC仍然注意到这种拼写;没有办法从手册中知道,因为如果它知道,它是一个未记录的功能


我想在这里询问原作者的意图,因为他们认为这不适合文档。

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

gcc不支持
-无符号
选项。但是,它会将选项传递给链接器,GNU ld有一个
-u
选项:

“-u符号”
'--未定义=符号'
强制在输出文件中输入未定义的符号 象征。例如,这样做可能会触发附加的链接 标准库中的模块。”-u’可以用复数形式重复 输入其他未定义符号的不同选项参数。 此选项相当于“EXTERN”链接器脚本命令

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

因此,其目的可能是对无符号类型进行处理,但至少在现代版本的gcc中,其效果是在输出文件中输入
nsigned
,作为未定义的符号

在我做的快速测试(编译并运行一个小的“hello,world”程序)中,这似乎没有效果。程序运行正常,
nm hello
的输出包括:

                 U nsigned

在另一个系统上使用较旧版本的gcc(2.95.2),我得到了一个关于未定义符号的致命链接时间错误。

当你说legacy时,legacy如何?如果您知道它最初是为什么编译器编写的,我们可以开始在旧手册中进行二分法。请注意,我能找到的最早的GCC版本是2.95.3,它也没有
-unsigned
。据我所知,GCC允许使用添加命令行参数。您可以尝试查看他们是否正在使用自定义规范文件,或者至少不再这样工作。vs@BaummitAugen:作为旁白,下面的
0
是什么?o、 我相信gcc的价值。编译失败时是
1
。@BaummitAugen:明白了。哇,这太令人困惑了。gcc实际上接受
-未签名的
,但不是作为编译器选项。看到我的答案了。你有一个gcc 2.95在工作吗?0.哦,好发现!:)@BaummitAugen:在运行Solaris 9的SPARC上。(不是我的,只是我可以访问的一个系统。)