#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define TIME_PRINTF(format, ...) do { \
time_t t = time(NULL); \
const char *prefix = "%s -> "; \
char time_format_vla[strlen(prefix) + strlen(format) + 1]; \
strcpy(time_format_vla, prefix); \
strcat(time_format_vla, format); \
printf(time_format_vla, ctime(&t), __VA_ARGS__); \
} while (false)
int main(void)
{
TIME_PRINTF
("Hello %s, your number is %d! Please wait...\n\n", "User", rand() % 100);
// waste some time
for (size_t n=0; n < SIZE_MAX; ++n);
// unfortunately, we need to pass at least two parameters
TIME_PRINTF("%s", "So how's it going?");
}
I2luY2x1ZGUgPHN0ZGJvb2wuaD4KI2luY2x1ZGUgPHN0ZGRlZi5oPgojaW5jbHVkZSA8c3RkaW50Lmg+CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHRpbWUuaD4KCiNkZWZpbmUgVElNRV9QUklOVEYoZm9ybWF0LCAuLi4pICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICB0aW1lX3QgdCA9IHRpbWUoTlVMTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBjb25zdCBjaGFyICpwcmVmaXggPSAiJXMgLT4gIjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBjaGFyIHRpbWVfZm9ybWF0X3ZsYVtzdHJsZW4ocHJlZml4KSArIHN0cmxlbihmb3JtYXQpICsgMV07ICBcCiAgICBzdHJjcHkodGltZV9mb3JtYXRfdmxhLCBwcmVmaXgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBzdHJjYXQodGltZV9mb3JtYXRfdmxhLCBmb3JtYXQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBwcmludGYodGltZV9mb3JtYXRfdmxhLCBjdGltZSgmdCksIF9fVkFfQVJHU19fKTsgICAgICAgICAgICBcCn0gd2hpbGUgKGZhbHNlKQoKaW50IG1haW4odm9pZCkKewogICAgc3JhbmQodGltZShOVUxMKSk7CiAgICBUSU1FX1BSSU5URigiSGVsbG8gJXMsIHlvdXIgbnVtYmVyIGlzICVkISBQbGVhc2Ugd2FpdC4uLlxuXG4iLCAiVXNlciIsIHJhbmQoKSAlIDEwMCk7CgogICAgLy8gd2FzdGUgc29tZSB0aW1lCiAgICBmb3IgKHNpemVfdCBuPTA7IG4gPCBTSVpFX01BWDsgKytuKTsKCiAgICAvLyB1bmZvcnR1bmF0ZWx5LCB3ZSBuZWVkIHRvIHBhc3MgYXQgbGVhc3QgdHdvIHBhcmFtZXRlcnMgICAgCiAgICBUSU1FX1BSSU5URigiJXMiLCAiU28gaG93J3MgaXQgZ29pbmc/Iik7Cn0=