source

main 앞에 함수 호출

lovecheck 2023. 7. 1. 09:00
반응형

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

반응형