首页 > 试题广场 >

请你来写个函数在main函数执行前先运行

[问答题]

请你来写个函数在main函数执行前先运行

全局static变量的初始化在程序初始阶段,先于main函数的执行,所以可以利用这一点。在leetcode里经常见到利用一点,在main之前关闭cin与stdin的同步来“加快”速度的黑科技:

static int _ = []{
    cin.sync_with_stdio(false);
    return 0;
}();

__attribute((constructor))是gcc扩展,标记这个函数应当在main函数之前执行。同样有一个__attribute((destructor)),标记函数应当在程序结束之前(main结束之后,或者调用了exit后)执行

发表于 2019-08-28 10:40:21 回复(1)
test0:
__attribute((constructor))是gcc扩展,标记这个函数应当在main函数之前执行。同样有一个__attribute((destructor)),标记函数应当在程序结束之前(main结束之后,或者调用了exit后)执行;
test1:
全局(static)变量的初始化在程序初始阶段,先于main函数的执行;
#include <iostream> 
using namespace std;

__attribute((constructor))void test0()
{
    printf("before main 0\n");
}

int test1(){
	cout << "before main 1" << endl;
	return 54;
}
 
static int i = test1();
 
int main(int argc, char** argv) {
 
	cout << "main function." <<endl;
	return 0;
}


发表于 2020-01-23 10:52:09 回复(0)