С любопытством к определению и области действия typedef
я написал ниже код C в 2 файлах .c:
main.c
#include <stdio.h>
int main()
{
int a = 5, b = 6;
printf("a = %d, b = %d\n", a, b);
swap(&a, &b);
printf("a = %d, b = %d\n", a, b);
}
swap.c
typedef T;
void swap(T* a, T* b)
{
T t = *a;
*a = *b;
*b = t;
}
К моему удивлению, файлы кода можно было скомпилировать с помощью компилятора Visual Studio C (cl.exe /Tc main.c swap.c
)
И программа работает корректно! Насколько я понимаю, typedef
требует 2 параметра, но почему этот код компилируется и запускается?
Для дальнейшего анализа в основной функции я объявил еще 2 переменные с плавающей запятой и попытался также поменять местами обе после замены двух целых чисел, но на этот раз не удалось скомпилировать (с помощью cl.exe). Удивительно, что код можно скомпилировать и запустить с помощью Tiny C (tcc.exe main.c swap.c
), так что он работает как шаблонный метод!