Sun Studio 12:C 用户指南

B.2.76 -xchar[= o]

提供此选项仅仅是为了便于从将字符类型定义为无符号的系统中迁移代码。如果不是从这样的系统中迁移,请不要使用该选项。只有那些依赖字符类型符号的代码才需要重写,以显式指定带符号或者无符号。

o 可以是下列值之一:

表 B–17 -xchar 标志

标志 

含义 

signed

将声明为字符的字符常量和变量视为带符号的。这会影响已编译代码的行为,而不影响库例程的行为。 

s

signed 等效。

unsigned

将声明为字符的字符常量和变量视为无符号的。这会影响已编译代码的行为,而不影响库例程的行为。 

u

unsigned 等效。

如果未指定 -xchar,编译器将假定 -xchar=s

如果指定了 -xchar 但未指定值,编译器将假定 -xchar=s

-xchar 选项会更改用 -xchar 编译的代码中类型 char 的值范围。该选项不更改任何系统例程或头文件中类型 char 的值范围。具体来讲,指定选项时不更改 limits.h 定义的 CHAR_MAXCHAR_MIN 的值。因此,CHAR_MAXCHAR_MIN 不再表示无格式字符中可编码的值的范围。

如果使用 -xchar,则在将字符与预定义的系统宏进行比较时要特别小心,原因是宏中的值可能带符号。任何返回错误代码而且可以用宏来访问错误代码的例程通常是这样的。错误代码一般是负值,因此在将字符与此类宏中的值进行比较时,结果始终为假。负数永远不等于无符号类型的值。

强烈建议不要使用 -xchar 为通过库导出的任何接口编译例程。Solaris ABI 将类型 char 指定为带符号,并且系统库也按此指定。还未对系统库针对将 char 指定为无符号的效果进行广泛测试。可以不使用该选项,而修改您的代码使其不依赖于类型 char 是否带符号。类型 char 的符号因不同的编译器和操作系统而不同。