我正在學習C++,我們正在研究預處理器,但我試圖解決一個測驗中的一個問題,這個問題讓我有點困惑或者很多..我試圖在運行程序..和我的輸出以2爲..C++定義預處理器
系統開始...
數據是:在1 27 28 29 30
數據是:23 24 25 26
的數據是:19
我在Xcode中檢查了程序t Ø看看我的輸出是正確的,但正確的輸出是下一個:
系統開始...
數據以1:0 0 0 0 19
數據是:7 0 0 0
的數據是:19 0 0 0
這是代碼...
#include <iostream>
namespace test{
#define COMPILE_FAST
#define PRINT_SPLIT(v) std::cout << (int)*((char*)(v)) << ' ' << \
(int)*((char*)(v) + 1) << ' ' << (int)*((char*)(v) +2) << ' ' << \
(int)*((char*)(v) + 3) << std::endl
typedef unsigned long long uint;
namespace er{
typedef unsigned int uint;
}
void debug(void* data, int size = 0){
if(size==0){
std::cout << "The data is: ";
PRINT_SPLIT(data);
} else {
while(size--){
std::cout << "Data at " << size << " is: ";
char* a = (char*)data;
PRINT_SPLIT((a + (4+size)));
}
}
}
}// End of Test namespace...
int main(){
test::uint a = 19;
test::er::uint b[] = {256,7};
std::cout << "System started..." << std::endl;
test::debug(b,2);
test::debug(&a);
std::cout << "Test complete";
return 0;
}
我最大的疑問還是什麼其實我不明白是什麼回事呢在這種預處理,因爲顯然對我所做的完全錯誤的......
#define PRINT_SPLIT(v) std::cout << (int)*((char*)(v)) << ' ' << \
(int)*((char*)(v) + 1) << ' ' << (int)*((char*)(v) +2) << ' ' << \
(int)*((char*)(v) + 3) << std::endl
如果有人能這麼漂亮,給我一個簡要的解釋,我將非常感激。
' 4 + size'應該是'4 * size'(或者更好,sizeof(int)* size') –