2013-12-10 67 views
0

我想知道它是否可能在代碼塊中使用gcc擴展,如typeof在Windows環境中。在代碼塊窗口上使用gcc擴展

以下代碼僅用於展示我想如何使用typeof

#include <stdio.h> 
#include <stdlib.h> 
#define SWAP(x, y) do { typeof(x) temp##x##y = x; x = y; y = temp##x##y; } while (0) 

typedef struct Away{ 
    int var1; 
    char cc; 
    int array[10]; 
} somedatatype; 

void print_data(somedatatype data){ 
    printf("var1 = %d\ncc = %c\narray[10] = {",data.var1,data.cc); 
    for(int i=0;i<10;i++){ 
     i!=9 ? printf("%d,",data.array[i]):printf("%d}",data.array[i]); 
    } 
} 

int main(){ 
    somedatatype data1, data2; 
    int a=51,b=42; 
    //initialize data1 
    data1.var1=2; 
    data1.cc='k'; 
    for(int i=0;i<10;data1.array[i]=5,i++); 
    //initialize data2 
    data2.var1=3; 
    data2.cc='y'; 
    for(int i=0;i<10;data2.array[i]=4,i++); 
    //swap 
    SWAP(data1, data2); 
    SWAP(a, b); 
    //print everything 
    printf("data1:\n"); 
    print_data(data1); 
    printf("\ndata2:\n"); 
    print_data(data2); 
    printf("\na = %d\nb = %d\n"); 
} 

PS:通過 http://gcc.gnu.org/onlinedocs/gcc/Typeof.html#Typeof

回答

1

字面上讀書時,我無法找到一個辦法 - 是的,這是可能的。

GNU C中提供的這個gcc擴展名。使用-std=gnu99(因爲你也在使用int來聲明,C89不是這裏的選項)指定它。

+0

謝謝,我正在嘗試** std = c99 **,它沒有編譯。 但我認爲標誌** - std = c99和-std = gnu99 **是相同的。 – Mansueli