Stringization char '#' 在 arm-linux-androideabi-gcc 上使用 c/c++ 宏
Stringification char '#' using c/c++ macro on arm-linux-androideabi-gcc
我有一个这样的宏。
#define TO_STR(x) #x
我可以使用这个宏来生成字符串,而不需要字符"
之间的输入字符串。类似:
const char* test = TO_STR(hello,macro);
std::cout << test << std::endl;
我可以:CCD_ 2正确。
我的问题是:如何处理输入字符串中的字符#
。类似:
const char* shaderprogram = TO_STR(#version 300 es n);
这会导致错误,有什么建议吗?
第一个错误,因为预处理器将把,
视为分隔两个参数,而不是作为参数的一部分。
您可以尝试创建第二个宏
#define TO_STR2(a,b) TO_STR(a) "," TO_STR(b)
如果你想用三个参数做同样的事情,你需要定义另一个宏
#define TO_STR3(a,b,c) TO_STR2(a,b) "," TO_STR(c)
这对于更多的争论是可能的,但很混乱——毕竟,宏并不是真正用来做这类事情的。
第二个问题的解决方案是简单的
const char* shaderprogram = "#" TO_STR(version 300 es n);
然而,真正的解决方案是摆脱对宏的痴迷,该宏允许您将"
字符从字符串文字中删除。只有当字符串运算符是问题的唯一解决方案时,才在宏中使用它,而不是在有替代方案时作为首选工具。
毕竟,这个
const char* shaderprogram = "#" TO_STR(version 300 es n); // blech!
不如
const char* shaderprogram = "#version 300 es n";
通过多种措施,包括可读性、可维护性等
相关文章:
- 最终的ARM Linux内存碎片与NEON Copy,但不是memcpy
- QT创建者:Arm-Linux-androideabi-G :找不到
- beaglebone上的GTK 绑定(ARM Linux)
- 如何使用 arm-linux-gcc 交叉编译 gmock
- arm linux gnueabi cannot find `-lz`
- arm-linux-androideAB-G++ 找不到标头 CSTDARG
- 在beaglebone black上使用arm-linux-gnueabihf时跳过不兼容错误
- 我在哪里可以找到arm-linux-gneabihf-ld的手册页,更不用说写得很好的手册页了,其中包括-rpath和-
- 静态 opencv 在 Arm Linux busybox 上找不到 USB 网络摄像头
- arm-linux-gnueabihf-g++ 是否有可靠的 C++0x 支持?
- 如何使用Arm-Linux-androideabi编译器
- Cocos2dx 安卓构建错误:"arm-linux-androideabi-g++: No such file or directory"
- ARM Linux 中的队列库
- 为什么在编译 Boost 时会使用 "arm-linux-gnueabi-g++"?
- Android NDK - arm-linux-androideabi-g++: not found
- arm-linux-androidabi/bin/ld:致命错误:-soname:必须采用非空参数
- Stringization char '#' 在 arm-linux-androideabi-gcc 上使用 c/c++ 宏
- 当使用g++-arm-linux-gnueabi时,包含C++系统头的正确方式
- 使用arm-linux- gnuabi -g++ -o时出现段故障,不使用-o也不会出现问题
- 交叉编译libcurl for arm-linux-gnueabi-gcc