2016-04-30 11 views
-2

Ich frage mich, ob es möglich ist, dass Sie zwei Funktionen schreiben können, in denen eine Funktion vor der Hauptfunktion ausgeführt wird und die andere Funktion nach der Hauptfunktion ausgeführt wird ?? Dies wurde in einem Quiz-Wettbewerb gefragt, und ich finde es schwierig, die Antwort darauf zu suchen.Hauptfunktion Konzept in C

+3

Mögliche Duplikate: http://stackoverflow.com/questions/3974796/in-c-main-function-is-the-entry-point-to-program-how-i-can-change-it-to-to- an-oth – Matsmath

Antwort

3

Für Sachen an der Ausfahrt laufen, können Sie atexit

#include <stdio.h> 
#include <stdlib.h> 


void we_are_dying() 
{ 
     printf("Get the doctor!\n"); 

} 

int main(void) { 
    atexit(we_are_dying); 
    // your code goes here 
    printf("We are done\n"); 
    return 0; 
} 

Sachen für Lauf verwenden, bevor Haupt ich glaube nicht, das möglich ist.

+1

Nun, Sie könnten die CRT hacken, um 'preMain()' vor dem Aufruf von main() zu nennen, aber das erscheint genauso sinnlos wie die Frage des OPs sowieso. –

0

Der GCC-Compiler (GNU Compiler Collection) hat viele Erweiterungen hinzugefügt, die häufig übersehen wurden. Diese zusätzlichen Erweiterungen können uns helfen, die Entwicklung von C-Anwendungen zu vereinfachen. Eine der Erweiterungen war das Hinzufügen von Attributen. Basierend auf dem angegebenen Attribut können wir den Compiler anweisen, Funktionen oder Variablen speziell zu behandeln.

Mit dem Konstruktorattribut können wir die Funktionen angeben, die vor und nach der Ausführung der Funktion main() ausgeführt werden sollen. Siehe das folgende Beispiel (entnommen von - https://www.hackerearth.com/notes/c-program-callling-a-function-before-main/).

#include<stdio.h> 

/* Apply the constructor attribute to startFunc() so that it 
    is executed before main() */ 
void startFunc (void) __attribute__ ((constructor)); 

/* Apply the destructor attribute to lastFunc() so that it 
    is executed after main() */ 
void lastFunc (void) __attribute__ ((destructor)); 

void startFunc (void) 
{ 
    printf ("startup code before main()\n"); 
} 

void lastFunc (void) 
{ 
    printf ("Function after main()\n"); 
} 

int main (void) 
{ 
    printf ("In Main Function\n"); 
    return 0; 
} 

Der Link, den ich über eine andere Art und Weise die Start- und Exit-Funktionen zu erreichen gezeigt erwähnt hat. Aber #pragma startup ..#pragma exit ... wird nicht in gcc unterstützt. In gcc und clang sollten Sie stattdessen __attribute__((constructor)) und __attribute__((destructor)) verwenden.