Gcc:强制编译器默认使用unsigned char
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gcc:强制编译器默认使用unsigned char相关的知识,希望对你有一定的参考价值。
由于当char
限定符不存在时,C ++中的unsigned
的性质是编译器依赖的,是否有一个参数我可以传递给GCC,这将强制所有char
s编译为unsigned
?
你要找的旗帜是-funsigned-char
。
-funsigned-char
让
char
类型无符号,如unsigned char
。每种机器都有
char
的默认值。默认情况下它或者像unsigned char
或者像signed char
一样。理想情况下,便携式程序在依赖于对象的签名时应始终使用
signed char
或unsigned char
。但是许多程序都是使用普通的char
编写的,并期望它被签名,或者期望它是无符号的,这取决于它们所编写的机器。此选项及其反转使您可以使用相反的默认值来执行此类程序。
char
类型总是与signed char
或unsigned char
中的每一种类型不同,即使它的行为总是像这两者中的一种。
-fsigned-char
让
char
类型签名,就像signed char
一样。请注意,这相当于
-fno-unsigned-char
,这是-funsigned-char
的负面形式。同样,选项-fno-signed-char
相当于-funsigned-char
。
正如其他答案所说,gcc的-funsigned-char
选项迫使普通的char
无条件。
但这可能不是解决您问题的最佳方案。您需要无符号字符,但是通过使用特定于编译器的选项,您可以在构建命令(Makefile,构建脚本或您键入的命令来编译代码)中编码该信息。如果程序的语义依赖于无符号字符,最好在源代码中记录该信息。它更清晰,它减少了某人错误地构建程序的机会。
如果你想要无符号字符,请使用unsigned char
。如果您想要签名字符,请使用signed char
。如果你只想要字符,并且你确定你的程序的行为不依赖于它们是有符号还是无符号(例如,如果所有存储的值都在0..127范围内),请使用char
。
没有足够的声誉评论@ Keith的回答。
我看到使用-funsigned-char
或-fsigned-char
的主要原因是你想要下面的代码
printf("%d
",'x80');
显示-128
或128
。
关于不依赖于特定编译设置的评论是有效的,但这里有点简化现实。主要问题是出于效率原因,C将语言的某些部分留给了实现,并且通常您希望调整该实现以适合您的应用程序。在我看来,专业开发人员应该始终检查所有编译器标志并根据他的需要选择最佳标志。如果您依赖某些特定设置,您的单元测试当然会涵盖该情况,或者断言。如果移植应用程序,则将查看原始端口的编译设置。
您可以使用-funsigned-char
,或者使用-fsigned-char
进行签名。
您可以使用选项:-funsigned-char
。
以上是关于Gcc:强制编译器默认使用unsigned char的主要内容,如果未能解决你的问题,请参考以下文章
如何强制 OpenMPI 使用 GCC 而不是 ICC?是不是需要重新编译 OpenMPI?