-qmacpstr
适用的调用
选项 | xlc (编译 C) | xlC (编译 C++) | xlclang(编译 C) | xlclang++(编译 C++) |
---|---|---|---|---|
-qmacpstr | ✓ | ✓ |
注: 此表中仅列出典型调用。 对于所有基本调用及其等效特殊调用,您可以参阅 编译器调用的完整列表 。
类别
等效编译指示
#pragma 选项 [no] macpstr
用途
将 Pascal 字符串文字(以 \p
转义序列为前缀)转换为以 null 结束的字符串,其中第一个字节包含字符串的长度。
例如,当 -qmacpstr 选项生效时,编译器会转换:
“\pABC”
to:'\03' , 'A' , 'B' , 'C' , '\0'
语法
缺省值
-qnomacpstr
使用量
Pascal 字符串字面值始终包含字符 "\p
。 字符串中间的字符 \p
不会构成 Pascal 字符串字面值,并且必须 紧跟在 前面的 " (双引号) 字符。
输入字符:
'\p' , 'A' , 'B' , 'C' , '\0'
在字符数组中不构成 Pascal 字符串文字。当 -qmbcs 或 -qdbcs 选项处于活动状态时,编译器将忽略 -qmacpstr 选项,因为 Pascal-string-literal 处理仅对一个字节字符有效。
#pragma options 关键字 macpstr 仅在任何 C 或 C++ 源代码语句之前的源文件顶部有效。 如果尝试在源文件中间使用它,那么会将其忽略,并且编译器会发出错误消息。
下面描述了如何处理 Pascal 字符串字面值。
- 由于不存在宽字符串的 Pascal-string-literal 处理,因此将宽字符串字面值中的转义序列
\p
与 -qmacpstr 选项配合使用,将生成警告消息,并且将忽略转义序列。 - 将 Pascal 字符串字面值并置为普通字符串会提供非 Pascal 字符串。 例如,并置字符串:
给出:“ABC” “\pDEF”
“ABCpDEF”
- 并置两个 Pascal 字符串字面值 (例如,
strcat
) 不会生成 Pascal 字符串字面值。 但是,如上所述,可以并置两个相邻的 Pascal 字符串字面值,以形成一个 Pascal 字符串字面值,其中第一个字节是新字符串字面值的长度。 例如,并置字符串:“\p ABC” “\p DEF”
或
结果是:“\p ABC” “DEF”
“\06ABCDEF”
- Pascal 字符串文字不能与宽字符串文字并置。
- 编译器将长度超过 255 个字节 (不包括长度字节和终止 NULL) 的 Pascal 字符串文字截断为 255 个字符。
- Pascal 字符串字面值 不是 与其他 C 或 C++ 字符串字面值不同的基本类型。 对 Pascal 字符串文字的处理完成后,生成的字符串将与所有其他字符串一样处理。 如果程序将 C 字符串传递到期望 Pascal 字符串的函数,或者反之亦然,那么行为未定义。
- 在处理完成后修改 Pascal 字符串字面值的任何字节都不会改变第一个字节中的原始长度值。 例如,在字符串
“\06ABCDEF”
中,将空字符替换为字符串中间的其中一个现有字符不会更改字符串的第一个字节的值,该字节包含字符串的长度。 - 修改已处理的 Pascal 字符串字面值的字节时,不会发出任何错误或警告。
预定义的宏
无。
示例
要编译 mypascal.c 并将字符串文字转换为 Pascal 样式的字符串,请输入:
xlc mypascal.c -qmacpstr