#ifndef BLUELIB_INIT_H_ #define BLUELIB_INIT_H_ #ifdef __cplusplus #define B_INIT(f) \ static void f(void); \ struct f##_t_ { \ f##_t_(void) \ { \ f(); \ } \ }; \ static f##_t_ f##_; \ static void f(void) #elif defined(_MSC_VER) #pragma section(".CRT$XCU", read) #define B_INIT2_(f, p) \ static void f(void); \ __declspec(allocate(".CRT$XCU")) void (*f##_)(void) = f; \ __pragma(comment(linker, "/include:" p #f "_")) static void f(void) #ifdef _WIN64 #define B_INIT(f) B_INIT2_(f, "") #else #define B_INIT(f) B_INIT2_(f, "_") #endif #else #define B_INIT(f) \ static void f(void) __attribute__((constructor)); \ static void f(void) #endif #endif