Следующий макрос 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
или чего-то __MY_SIZE
, вы действительно не можете этого сделать. Вы застряли с sizeof
вы не писали, лучше или хуже.