私は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
誰かがとても親切で簡単な説明をしてくれたら、とても感謝します。