簡體   English   中英

將類型傳遞給C宏

[英]Passing Type to C macros

我正在嘗試在C宏中傳遞類型,但是我遇到了錯誤。

#include <stdio.h>)

    int size = 0;
    #define SIZEOF(TYPE) \
        TYPE _array_[2]; \
        size = (char*)(&_array_[1]) - (char*)(&_array_[0]);

    int main(int argc, char** argv, char** envp) {
        int array[2];
        int x = SIZEOF(int);
        printf("Size Of Integer = %d", SIZEOF(int));
        return 0;
    }

宏擴展是文本替換。 您的代碼擴展為:

int x = int _array_[2]; size = (char*)(&_array_[1]) - (char*)(&_array_[0]);

初始部分int x = int是語法錯誤。

您可以通過編寫以下代碼來使代碼工作而無需更改宏:

SIZEOF(int);
printf("Size Of Integer = %d", size);

一種改進是將變量的名稱作為參數傳遞給宏,而不是使用全局變量。

嘗試這個:

#define SIZEOF(TYPE) \
    ({ \
    TYPE _array_[2]; \
    (char*)(&_array_[1]) - (char*)(&_array_[0]); \
    })

...盡管它對表達式內的語句使用gcc特定的支持,所以我建議改為使用標准的sizeof運算符。

如何實際使用:

printf("Size Of Integer = %d", (int)SIZEOF(int));

也就是說,它可以很好地替代sizeof在編譯器上實際上允許在表達式內使用骯臟的語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM