#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
#define PRINT1(...) printf(__VA_ARGS__)
#define PRINT2(X, ...) printf("Message "#X": ", ##__VA_ARGS__)
#define PRINT3(...) printf(##__VA_ARGS__)
#define PRINT4(X, ...) printf("Message "#X": " ##__VA_ARGS__)
int main()
{
//__VA_ARGS__
double a = 40;
double b = sqrt(a);
PRINT1("Hello~ \n"); //Hello~
PRINT1("a = %f, b = %.3f \n", a, b); //a = 40.000000, b = 6.325
PRINT2(0); //Message 0:
PRINT2(1, "a = %.2f, b = %.4f\n", a, b); //why??? Expect: Message 1: a = 40.00, b = 6.3246; Result: Message 1:
printf("\n\n\n");
//##__VA_ARGS__
//PRINT3("Hello~ \n"); //Compile error, why???
//PRINT3("a = %f, b = %.3f \n", a, b); //Compile error, why???
PRINT4(0); //Message 0:
//PRINT4(1, "a = %.2f, b = %.4f\n", a, b); //Compile error, why???
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGNtYXRoPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBQUklOVDEoLi4uKSBwcmludGYoX19WQV9BUkdTX18pCiNkZWZpbmUgUFJJTlQyKFgsIC4uLikgcHJpbnRmKCJNZXNzYWdlICIjWCI6ICIsICMjX19WQV9BUkdTX18pCgojZGVmaW5lIFBSSU5UMyguLi4pIHByaW50ZigjI19fVkFfQVJHU19fKQojZGVmaW5lIFBSSU5UNChYLCAuLi4pIHByaW50ZigiTWVzc2FnZSAiI1giOiAiICMjX19WQV9BUkdTX18pCgppbnQgbWFpbigpCnsKLy9fX1ZBX0FSR1NfXwoJZG91YmxlIGEgPSA0MDsKICAgIGRvdWJsZSBiID0gc3FydChhKTsKCVBSSU5UMSgiSGVsbG9+IFxuIik7CQkJCQkJCS8vSGVsbG9+CglQUklOVDEoImEgPSAlZiwgYiA9ICUuM2YgXG4iLCBhLCBiKTsJCQkvL2EgPSA0MC4wMDAwMDAsIGIgPSA2LjMyNQoJUFJJTlQyKDApOwkJCQkJCQkJCQkvL01lc3NhZ2UgMDogCiAgICBQUklOVDIoMSwgImEgPSAlLjJmLCBiID0gJS40ZlxuIiwgYSwgYik7CQkvL3doeT8/PyBFeHBlY3Q6IE1lc3NhZ2UgMTogYSA9IDQwLjAwLCBiID0gNi4zMjQ2OyBSZXN1bHQ6IE1lc3NhZ2UgMTogIAoJcHJpbnRmKCJcblxuXG4iKTsKCi8vIyNfX1ZBX0FSR1NfXwoJLy9QUklOVDMoIkhlbGxvfiBcbiIpOwkJCQkJCQkvL0NvbXBpbGUgZXJyb3IsIHdoeT8/PwoJLy9QUklOVDMoImEgPSAlZiwgYiA9ICUuM2YgXG4iLCBhLCBiKTsJCQkvL0NvbXBpbGUgZXJyb3IsIHdoeT8/PwoJUFJJTlQ0KDApOwkJCQkJCQkJCQkvL01lc3NhZ2UgMDogCiAgICAvL1BSSU5UNCgxLCAiYSA9ICUuMmYsIGIgPSAlLjRmXG4iLCBhLCBiKTsJCS8vQ29tcGlsZSBlcnJvciwgd2h5Pz8/CgkKCXJldHVybiAwOwoKfQ==