Нет никакой разницы, потому что оба незаконны.
int*
не является допустимым идентификатором макроса, и даже если вы вставите пробел, он также не будет int
, потому что это ключевое слово и зарезервировано. Даже если вы переключили его на вероятное значение #define char int*
, по той же причине произойдет сбой.
И вы не можете переопределить тип char
, поэтому typedef
- это перебор.
Разница, если бы вы приводили примеры, которые были законными, заключается в том, что #define
является директивой предварительной обработки. Это делает только текстовую замену, перед этапом компиляции. Наоборот, typedef
определяет новый тип, и этот новый идентификатор типа уважает «правила», как и любой другой тип.