2016-03-25 30 views
-5

İlk kez gerçekten #pragma ile çalışıyorum ve bazı nedenlerle çevrimiçi olarak gönderilenlerle aynı çıktıyı alamıyorum, işlevler çıkmıyor, GCC v5.3 ve clang v. 3.7 kullanıyordum. İşte kod# pragma C'de çalışmıyor mu?

#include<stdio.h> 

void School(); 
void College() ; 

#pragma startup School 105 
#pragma startup College 
#pragma exit College 
#pragma exit School 105 

void main(){ 
    printf("I am in main\n"); 
} 

void School(){ 
    printf("I am in School\n"); 
} 

void College(){ 
    printf("I am in College\n"); 
} 

ve ben "gcc file.c" ve "clang file.c" ile derleme. Aldığım çıktı "ana bilgisayarım"

+3

Nerede '[GCC belgelerinde] içinde exit' # Pragma startup' ve' # Pragma (https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc buldunuz /Pragmas.html)? –

+2

Pragmas derleyiciye bağımlıdır, [GCC çevrimiçi pragmalarla ilgili belgeler] (https://gcc.gnu.org/onlinedocs/gcc/Pragmas.html) bunlara yer vermez, bu yüzden muhtemelen Clang (GCC'yi hedefler) uyumluluk) da bunlara sahip değil. [Visual C derleyicisi bu pragmalara sahip değildir] (https://msdn.microsoft.com/en-us/library/d9x1s805.aspx). Hızlı arama, [Embarcadero C++ Builder] 'a (https://www.embarcadero.com/products/cbuilder) özgü olduklarını gösterir. –

+0

http://stackoverflow.com/q/29462376/971127 – BLUEPIXY

cevap

0

#pragma, derleyiciler arasında tutarlı değil. Yalnızca belirli derleyiciler/platformlarla garip durumlarda kullanılmalıdır. Böyle genel bir program için asla kullanılmamalıdır.

Bunu gerçekleştirmenin daha iyi bir yolu #define ve #if. Örneğin:

#include<stdio.h> 

#define SCHOOL 1 
#define COLLEGE 2 

#define EDUCATION_LEVEL COLLEGE 

void None(); 
void School(); 
void College(); 

void main(){ 
    #if EDUCATION_LEVEL == SCHOOL 
     School(); 
    #elif EDUCATION_LEVEL == COLLEGE 
     College(); 
    #else 
     None(); 
    #endif 
} 

void None(){ 
    printf("I am in neither school nor college\n"); 
} 

void School(){ 
    printf("I am in School\n"); 
} 

void College(){ 
    printf("I am in College\n"); 
}