2012-04-18 4 views
1

중요한 객체의 초기화를 위해 함수가 먼저 호출되도록하려고합니다. 그러나, 나는 init_seg이 사용/호출되고있는 방법에 대해 혼란스러워합니다.init_seg를 사용하여 초기화 함수 호출

예를 들어, msdn의 설명서에서 다음과 같이 처음 호출되는 것처럼 보일 것입니다. 이 기능은 단지 분명히 (I 물론, 명시 적으로 호출하지 않은 경우) 자동으로 호출되지 않습니다 같은 경우 될 것 같지 않습니다 그러나

#pragma init_seg(".CRT$XCC") 

static void InitializeStuff() 
{ 
    printf("InitializeStuff\n"); 
} 

.

init_set을 사용하여 나머지 다른 실행 코드보다 먼저 함수가 호출되도록하려면 어떻게해야합니까?

+0

'main()'보다 먼저 호출되기를 원하십니까? 그게 니가 원하는거야? – Nawaz

+0

제 신청서가 제일 먼저 필요하다는 것을 확실히하고 싶습니다. Bo Persson의 답변과 함께 http://stackoverflow.com/questions/10198675/compiler-specific-memory-initialization 질문에서 오늘 초반에 이것을 제안했습니다. – chadb

+0

함수 이름을 사용하는 네 번째 (?) 버전의 ['init_seg'] (https://msdn.microsoft.com/en-us/library/7977wcck.aspx)를 사용해야한다고 생각합니다 :'#pragma init_seg (".CRT $ XCU", "InitializeStuff")'. – jww

답변

1

나는 그것이 바로 당신이 #pragma init_seg

예와 같은 파일에 먼저 초기화 할 모든 전역 변수 배치 이해 한 경우 :

#pragma init_seg(".CRT$XCB") 

class A 
{ 
    A() 
    { 
     printf("first!\n"); 
    } 
}; 

static A first; 

그리고 당신은 다른 장소 해달라고 확인을 처음에 초기화 할 파일보다 전역에있는 파일을 선택하십시오.

+0

당신의 예제는 클래스의 사용을 보여 주지만, 나는 내 게시물에서 언급 한 것처럼 함수를 사용하여이 작업을 수행하기를 희망했다. 수업을 시연 한 특별한 이유가 있습니까? 그것은 수업이어야합니까? 함수로 할 수 없는가? 그렇지 않다면 왜 안 되니? – chadb

+0

아니요. pragma 지시문은 정적/전역 객체의 작성 순서 만 정렬합니다. 그 순서는 달리 정렬되지 않았으므로 알 수 없습니다. 프로그램에서 함수를 먼저 호출하려는 이유는 무엇입니까? – David

+0

정말로 init_seg 지시어를 사용하고 싶지 않다면, 클래스를 만들고 생성자에서 모든 초기화 코드를 실행할 수 있습니다 ("printf ("first! \ n ");"를 코드로 대체하십시오) ... – David