Мне было интересно, если один из этих вариантов ... быстрее
Ни typedef, ни макрос не быстрее, если учитывать время выполнения. Может быть, теоретически можно быстрее скомпилировать, но, возможно, незначительным образом.
Функция вряд ли будет работать медленнее, пока она развернута в строке.
Мне было интересно, является ли один из этих вариантов более элегантным
Typedef и функция более элегантны. Всегда используйте их вместо макросов. Они являются регулярным идентификатором и следуют правилам пространства имен. Пространство имен не влияет на макросы.
Такие функции, как макросы, особенно проблематичны c, и их аргументы не ведут себя так, как их ожидают новички. Кроме того, сообщения об ошибках будут намного понятнее с функциями.
Но также подумайте, нужна ли в первую очередь функция typedef или функция-обертка. Часто может быть непродуктивно скрывать базовый тип или функцию.
Макросы полезны для: защиты заголовков (если вам не нравится #pragma один раз), повторяющихся объявлений (некоторым может не понравиться этот вариант использования), межсистемное портирование (например, для обнаружения функций и системных атрибутов c)