2017-06-13 70 views
-1

我想將一個數字映射到C中的關鍵字類型。是否有反正這樣做?C宏預處理器將數字映射到類型

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

#define DOUBLE_TYPE 1 
#define INT_TYPE 2 

#define OBJECT_TYPE(Y) 
     #if Y == DOUBLE_TYPE \ 
       double \ 
     #elif Y == INT_TYPE \ 
       int \ 
     #else \ 
       int \ 
     #endif \ 

int main(int argc, char* argv[]) { 
     unsigned int type = 1; 
     OBJECT_TYPE(type) value = 0.5f; 
     printf("%f\n", value); 

     return 0; 
} 
test.c:11:3: error: missing binary operator before token "double" 
    double \ 

我希望能夠施放void*由整數代碼已知的特定類型。

+0

的C ** **預處理器有沒有數據類型的概念。你不能嵌套指令。 C是靜態類型的。你的嘗試沒有任何意義。這是一個XY問題。你想要解決什麼? – Olaf

+0

預處理器是編譯時的事情,在實際編譯發生之前在單獨的階段運行。預處理器使用它自己的獨立語言,並沒有C變量的概念。 –

+0

此外,沒有'default'類型的東西。 –

回答

2

你想要做的事對宏來說是不可能的。他們只做編譯時的文本替換,而你想要的則取決於運行時的值。

如果你想有效地與變體類型的變量,使用union

struct var_type { 
    int type; 
    union { 
     int i; 
     double d; 
    } value; 
}; 

int main(int argc, char* argv[]) { 
    struct var_type value = { DOUBLE_TYPE, { d = 0.5f }}; 

    switch (value.type) { 
    case DOUBLE_TYPE: 
     printf("%f\n", value.value.d); 
     break; 
    case INT_TYPE: 
     printf("%d\n", value.value.i); 
     break; 
    default: 
     printf("%d\n", value.value.i); 
     break; 
    } 

    return 0; 
} 
+0

我希望能夠將void *轉換爲由整數代碼所知的特定類型。 –

+0

你不能這樣做@eat_a_lemon – tilz0R

+0

@eat_a_lemon然後檢查類型並將其轉換爲該類型。 – dbush