相关疑难解决方法(0)

C++ 11中字符串文字的Unicode编码

在一个相关的问题之后,我想问一下C++ 11中的新字符和字符串文字类型.看来我们现在有四种字符和五种字符串文字.角色类型:

char     a =  '\x30';         // character, no semantics
wchar_t  b = L'\xFFEF';       // wide character, no semantics
char16_t c = u'\u00F6';       // 16-bit, assumed UTF16?
char32_t d = U'\U0010FFFF';   // 32-bit, assumed UCS-4
Run Code Online (Sandbox Code Playgroud)

和字符串文字:

char     A[] =  "Hello\x0A";         // byte string, "narrow encoding"
wchar_t  B[] = L"Hell\xF6\x0A";      // wide string, impl-def'd encoding
char16_t C[] = u"Hell\u00F6";        // (1)
char32_t D[] = U"Hell\U000000F6\U0010FFFF"; // (2)
auto     E[] = u8"\u00F6\U0010FFFF"; // (3)
Run Code Online (Sandbox Code Playgroud)

问题是:\x/ \u/ \U …

c++ unicode utf string-literals c++11

76
推荐指数
1
解决办法
5万
查看次数

在可变参数列表中有哪些类型的默认促销?

例如,我printf在C++中使用函数用于8位CPU(AVR).以下代码是否安全:

uint8_t a = 5;
printf("%d", a);
Run Code Online (Sandbox Code Playgroud)

这里%d期望int(在我的情况下为16位,在任何情况下至少为16位),但我传递8位整数.

C/C++标准是否保证任何类型的等级小于int升级int

同样的问题float a%f期望double,以及其他类似的类型.

c c++ variadic-functions

10
推荐指数
1
解决办法
1935
查看次数

在printf参数中提升类型是危险的吗?

我的问题源于在尝试构建多个位深度平台(例如32/64)时尝试使用printf来记录事物.

一直在养成丑陋头脑的问题是试图在多种体系结构上打印.在32位上它会是这样的

printf(" my int: %d\n", myInt);
Run Code Online (Sandbox Code Playgroud)

但在64位上,它必须改为

print (" my int: %ld\n", (long)myInt);
Run Code Online (Sandbox Code Playgroud)

我有两个相关的问题:

  1. 我的第一个想法是,当你告诉printf打印一个变量,给它一个格式时,它会查看该变量的地址并获取该格式所需的字节数.这一开始似乎是个大问题.例如,如果你有一个变量myChar,它是一个char(1个字节),但使用了%d的格式说明符,那将告诉printf转到myChar的地址并获取接下来的4个字节,将其视为int.如果是这种情况,似乎printf会从相邻变量中获取垃圾日期(因为它抓取了4个字节,但实际值只有1个字节).然而,情况似乎并非如此.通过使用myChar并指定%d,printf抓取1个字节,然后用0表示填充高3个字节.我的理解在这里是否正确?

  2. 如果上述情况属实,那么始终将变量提升到最大值是否有任何真正的危害,以避免在32/64位情况下出现的问题类型.例如,如果你有一个短变量myShort和一个int变量myInt,那么打印它们总是有任何缺点:

    printf("myShort%ld",(long)myShort); printf("myInt%ld",(long)myInt);

谢谢你的任何澄清.

c logging printf

7
推荐指数
1
解决办法
1097
查看次数

取消引用 char 指针返回 int ?为什么?

例如,以下代码在编译时返回错误和警告int,更改为%d

警告:格式%s需要 type 的char *参数,但参数 2 具有类型int

void stringd() {
    char *s = "Hello";
    printf("derefernced s is %s", *s);
}
Run Code Online (Sandbox Code Playgroud)

c

1
推荐指数
1
解决办法
75
查看次数

标签 统计

c ×3

c++ ×2

c++11 ×1

logging ×1

printf ×1

string-literals ×1

unicode ×1

utf ×1

variadic-functions ×1