紧随宏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
我试图结合这些,但我做不到。
最佳答案
你不能那样做。预处理器宏的邪恶之处在于,它是一种简单的文本替换,无需判断语法上下文。这样一来,您就可以进行各种古怪的工作,例如连接符号,惰性求值等。另一端是您无法掉头问问它的参数是什么-只是文本宏
如果没有为源中的每个符号(包括类型和变量)声明一个宏,该宏都包含用__MY_SIZE
或其他内容连接的符号,则您实际上无法做到这一点。不管是好是坏,您都受制于没有写的sizeof
。