在VS2013与VS2017的printf函数中使用宏
Using macros in printf function in VS2013 vs VS2017
我已经在我的源代码中定义了这个宏
#define UINT_08X_FORMAT "%08X"
我需要像这样在printf中使用上述内容:
printf("Test - "UINT_08X_FORMAT"", 50);
它在VS2013中编译并工作正常,而在VS2017中,它会抛出以下编译错误。
无效的文本后缀"UINT_08X_FORMAT";文本运算符或文本 未找到运算符模板"运算符"UINT32_FORMAT"
如何在 printf 中使用宏。
注意:我不想更改宏定义,因为它可以正常工作 VS2013.我需要一个适用于VS2013和VS2013的通用解决方案 VS2017.
C++11 添加了对用户定义文本 (UDL) 的支持,这些文本是通过向其他文本(在本例中为字符串文本)添加后缀来触发的。 可以通过在宏名称周围添加空格来克服它,以强制较新的C++编译器将其视为单独的标记而不是 UDL 后缀:
printf("Test - " UINT_08X_FORMAT "", 50);
请参阅 http://en.cppreference.com/w/cpp/language/user_literal 的以下注释:
自从引入用户定义的文字以来,使用 为不带空格的固定宽度整数类型设置宏常量的格式 在前面的字符串文本变为无效后:
std::printf("%"PRId64"n",INT64_MIN);
必须替换为std::printf("%" PRId64"n",INT64_MIN);
由于最大咀嚼量、用户定义的整数和浮点文字 以 p、P、(自 C++17) e 和 E 结尾,后跟运算符 + 或 -,必须与运算符分隔,并在源中使用空格
相关文章:
- 如何在类成员函数中获得类似printf中的编译警告
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类
- C++ 如果 Printf 位于函数中,则返回是不同的
- 点在printf函数中是什么意思
- 为什么 printf 函数在以下代码中显示所需的输出
- 在VS2013与VS2017的printf函数中使用宏
- 为什么printf()函数打破了C中的指针adress
- 我可以从函数返回 printf 语句吗?C++
- std::locale::global是否影响printf()函数
- 显示类变量.在 printf 函数中使用字符串作为参数
- 当使用另一个函数封装 printf 和 vfprintf 时,这种差异的原因是什么?
- 为什么printf函数家族关心区域设置
- 错误地将字符串传递给printf样式的日志函数时缺少错误
- 从自定义 printf 函数返回一个常量字符*
- 如何正确地使模板运算符 T() 与 printf 等函数一起使用
- 无法解析 Eclipse C/C 函数'printf'
- printf 函数C++参数化前导零
- 当将数组传递给 printf 等可变参数函数时,我是否应该将数组转换为指针
- printf函数是如何工作的
- printf函数参数之间的序列点;转换之间的顺序点是否重要