Ответ 1
##
в макросе есть конкатенация. Здесь MAKE_TYPE(test)
будет расширяться до: typedef int testId
.
Из 16.3.3 (Оператор ##):
Как для объектов, так и для функций макросов, перед список заметок пересматривается для больше имен макросов для замены, каждый экземпляр токена ## предварительной обработки в списке замещения (не из аргумент) удаляется, а предыдущий токен предварительной обработки конкатенирован со следующим токеном предварительной обработки