[C/C++] main 함수앞에서 실행하기

C++ 에서는 아주 쉽다.

전역 클래스 생성자를 사용하면 된다.

#include<iostream>
#if defined(_MSC_VER)
__declspec(selectany)  
#elif defined(__GNUC__)
__attribute__((weak))  
#endif
class premain {  
public:  
    premain() {
        std::cout << "premain" << std::endl;
    }
}_premain;
int main() {  
    std::cout << "main" << std::endl;
    return 0;
}

C 에서는 다른 방법을 사용한다.

#include<stdio.h>
int  
#if defined(__GNUC__)
__attribute__((constructor))  
#endif
premain(void) {  
    puts("premain");
    return 0;
}
#if defined(_MSC_VER)
# pragma section(".CRT$XCU",read)
__declspec(allocate(".CRT$XCU"))static int(*p)(void) = premain;  
# pragma data_seg()
#endif
int main() {  
    puts("hello, world");
    return 0;
}