以下宏MY_SIZE_OF_VARIABLE给出了sizeof变量 和MY_SIZE_OF_DATATYPE给出内置数据类型的大小。我想在一个宏中组合这两个宏。
#define MY_SIZE_OF_VARIABLE(X) (char *)(&X+1)-(char *)(&X)
#define MY_SIZE_OF_DATATYPE(X) (X*)0 + 1
我试图将这些结合起来,但我做不到。
答案 0 :(得分:0)
你做不到。作为预处理器宏的邪恶魔法的一部分是它是一个简单的文本替换,没有句法上下文的判断。这样你就可以做各种古怪的事情,如连接符号,懒惰的评估等等。另一方面是你无法转身并询问它的参数是什么 - 它只是一个文本宏。
除了为源中的每个符号声明一个宏,包括类型和变量,包含与__MY_SIZE
连接的符号之外,你真的不能这样做。无论好坏,你都会遇到你没写过的sizeof
。