我正在学习 C++ 并且我们正在讨论预处理器,但我正在尝试解决一个让我有点或很多困惑的测验问题。在运行程序之前,我尝试自己解决。和我的输出曾是..
系统启动...
2 处的数据为:27 28 29 30
1 处的数据为:23 24 25 26
数据为:19
我检查了 Xcode 中的程序,看看我的输出是否正确,但正确的输出是下一个:
系统启动...
1 处的数据为:0 0 0 19 0处的数据
为: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
如果有人能这么好,给我一个简短的解释,我将非常感激。