我必须将C代码与某些行内汇编组合在一起。在预处理时间将sizeof()的值转换为字符串
我媒体链接有简单的机制,将我的枚举值和宏成字符串:预处理后
#define STR(x) #x
#define DEF2STR(x) STR(x)
"string1 " DEF2STR(MACRO_VALUE_2) " string2"
输出字符串为:“字符串1 2字符串2”
的问题是,我怎么能追加的sizeof(类型)值转换为字符串?谢谢。
我必须将C代码与某些行内汇编组合在一起。在预处理时间将sizeof()的值转换为字符串
我媒体链接有简单的机制,将我的枚举值和宏成字符串:预处理后
#define STR(x) #x
#define DEF2STR(x) STR(x)
"string1 " DEF2STR(MACRO_VALUE_2) " string2"
输出字符串为:“字符串1 2字符串2”
的问题是,我怎么能追加的sizeof(类型)值转换为字符串?谢谢。
这个解决方案应该可以移植:
#include <stdio.h>
#include <limits.h>
#define STR1 "string1 "
#define STR2 " string"
#if (ULONG_MAX == 0xFFFFFFFFu)
#define LONGSIZE "4"
#elif (ULONG_MAX == 0xFFFFFFFFFFFFFFFFu)
#define LONGSIZE "8"
#endif
#define STR STR1 LONGSIZE STR2
int main()
{
puts (STR);
}
好主意。谢谢。 – Mihalko 2013-02-22 10:25:24
你可以用泛型编程来实现,通过递归地继承一个模板化的结构来构建一个int(或者更好的size_t)模板参数, 10并将正确的字符添加到自身的阵列构建中。
虽然它不会很漂亮。
有趣的问题,所以我写了这个编译时INT为字符串“功能”。请注意,你不能用macors做到这一点。我用constexpr(C++ 11,使用gcc 4.7进行测试)和模板完成了它。
typedef unsigned int uint;
// number of decimal digits in a number
constexpr int length(uint num) {
return num ? (length(num/10) + 1) : 0;
}
uint constexpr decShift(uint num, int n) {
return n <= 0 ? num : decShift(num/10, n-1);
}
// return '\0' or the nth decimal digit of num
char constexpr intChar(uint num, int index) {
return index < 0 ? 0 : ((decShift(num, index) % 10) + '0');
}
// templated short array of char containing the digits
template<uint num> struct intToStr {
static constexpr uint n = length(num);
static constexpr char value[16] = {
intChar(num, n - 1),
intChar(num, n - 2),
intChar(num, n - 3),
intChar(num, n - 4),
intChar(num, n - 5),
intChar(num, n - 6),
intChar(num, n - 7),
intChar(num, n - 8),
intChar(num, n - 9),
intChar(num, n - 10),
intChar(num, n - 11),
intChar(num, n - 12),
intChar(num, n - 13),
intChar(num, n - 14),
intChar(num, n - 15),
0
};
};
template<uint num> constexpr char intToStr<num>::value[16];
// test with sizeof
int main() {
char array[1357];
std::cout << intToStr<sizeof(array)>::value << std::endl;
}
类型转换应该有帮助吗? – 2013-02-22 09:05:13
[size of size \ _t preprocessor value]的可能重复(http://stackoverflow.com/questions/14938231/size-of-size-t-preprocessor-value) – alk 2013-02-22 12:03:24
预处理器不会执行sizeof。这是在编译阶段的后期。 – 2013-02-22 14:16:46