main 앞에 함수 호출
중복 가능성:
메인()이 정말로 C++ 프로그램의 시작입니까?
프로그램이 시작되기 전에 내 기능을 호출할 수 있습니까?어떻게 하면 이 일을 할 수 있습니까?C++
또는C
?
전역 변수를 가질 수도 있고 다음과 같이 사용할 수 있습니다.static
학급의 일원
1)static
학급의 구성원
//BeforeMain.h
class BeforeMain
{
static bool foo;
};
//BeforeMain.cpp
#include "BeforeMain.h"
bool BeforeMain::foo = foo();
전역 변수
bool b = foo();
int main()
{
}
룬딘이 게시한 이 링크(http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.14 의 미러 / 대안 제안)에 주목하십시오.
인C++
간단한 방법이 있습니다. 글로벌 개체의 생성자를 사용하십시오.
class StartUp
{
public:
StartUp()
{ foo(); }
};
StartUp startup; // A global instance
int main()
{
...
}
이는 글로벌 객체가 이전에 구성되었기 때문입니다.main()
시작합니다.Lundin이 지적했듯이 정적 초기화 순서 실패에 주목합니다.
사용하는 경우gcc
그리고.g++
컴파일러를 사용하면 이 작업을 수행할 수 있습니다.__attribute__((constructor))
예::
Ingcc(c) ::
#include <stdio.h>
void beforeMain (void) __attribute__((constructor));
void beforeMain (void)
{
printf ("\nbefore main\n");
}
int main ()
{
printf ("\ninside main \n");
return 0;
}
G++ (c++) ::
#include <iostream>
using namespace std;
void beforeMain (void) __attribute__((constructor));
void beforeMain (void)
{
cout<<"\nbefore main\n";
}
int main ()
{
cout<<"\ninside main \n";
return 0;
}
C++에서는 가능합니다. 예를 들어 가능합니다.
static int dummy = (some_function(), 0);
int main() {}
정적 저장 기간이 있는 개체의 이니셜라이저는 상수 식이어야 하므로 C에서는 이 옵션이 허용되지 않습니다.
저는 당신이 이 링크를 참조할 것을 제안합니다.
http://bhushanverma.blogspot.in/2010/09/how-to-call-function-before-main-and.html
Linux/Solaris의 GCC 컴파일러의 경우:
#include
void my_ctor (void) __attribute__ ((constructor));
void my_dtor (void) __attribute__ ((destructor));
void
my_ctor (void)
{
printf ("hello before main()\n");
}
void
my_dtor (void)
{
printf ("bye after main()\n");
}
int
main (void)
{
printf ("hello\n");
return 0;
}
$gcc main.c
$./a.out
hello before main()
hello
bye after main()
언급URL : https://stackoverflow.com/questions/10897552/call-a-function-before-main
'source' 카테고리의 다른 글
Array .find() 메서드 매개 변수가 vuex에 정의되지 않았습니다. (0) | 2023.07.06 |
---|---|
MongoDB에 안정적으로 다시 연결 (0) | 2023.07.01 |
ASP.NET MVC에서 비동기 메서드를 실행하고 잊습니다. (0) | 2023.07.01 |
Python 프로젝트에서 단일 실행 파일 생성 (0) | 2023.07.01 |
JDBC 연결에 대한 네트워크 시간 초과 설정 (0) | 2023.07.01 |