我必須將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