c - 字符常量中的多个字符

标签 c

Some C compilers permit multiple characters in a character constant. This means that writing 'yes' instead of "yes" may well go undetected. Source: C traps and pitfalls

任何人都可以举一个字符常量中允许多个字符的例子吗?

最佳答案

正如 Code Monkey 所引用的那样,它是由实现定义的并且实现各不相同——这不仅仅是 BigEndian/LittleEndian 和字符集的差异。我已经用程序测试了四种实现(全部使用 ASCII)

#include <stdio.h>

int main()
{
    unsigned value = 'ABCD';
    char* ptr = (char*)&value;

    printf("'ABCD' = %02x%02x%02x%02x = %08x\n", ptr[0], ptr[1], ptr[2], ptr[3], value);
    value = 'ABC';
    printf("'ABC'  = %02x%02x%02x%02x = %08x\n", ptr[0], ptr[1], ptr[2], ptr[3], value);
    return 0;
}

我得到了四个不同的结果

大端(AIX、POWER、IBM 编译器)

'ABCD' = 41424344 = 41424344
'ABC'  = 00414243 = 00414243

大端(Solaris、Sparc、SUN 编译器)

'ABCD' = 44434241 = 44434241
'ABC'  = 00434241 = 00434241

小端(Linux、x86_64、gcc)

'ABCD' = 44434241 = 41424344
'ABC'  = 43424100 = 00414243

小端(Solaris、x86_64、Sun 编译器)

'ABCD' = 41424344 = 44434241
'ABC'  = 41424300 = 00434241

关于c - 字符常量中的多个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59439824/

相关文章:

c - 取消索引 Collada

c - 如何制作指向具有不同参数数量的函数的函数指针?

c - 如何在Unix中使用递归函数实现find()函数(用C语言)

c - 这是哪一类

c - 尝试将缓冲区写入文件,但不断出现段错误,我不明白为什么

c - 如何在这里返回我的字符串 P ?

c - 缺少声明标识符

c - 为什么当我写到数组末尾时我的程序没有崩溃?

c - 如何制作一个一次只打印 4 个随机数的随机数生成器?

python - Gstreamer的理解