【发布时间】:2013-05-14 03:42:11
【问题描述】:
出于对typedef 的定义和范围的好奇,我在下面的 2 个 .c 文件中编写了 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 个浮点变量,并在交换了 2 个整数后也尝试交换两者,但这一次编译失败(使用 cl.exe)。令人惊奇的是,代码可以用 Tiny C (tcc.exe main.c swap.c) 编译和运行,所以它就像模板方法一样工作!
【问题讨论】:
-
这完全不像模板。
标签: c typedef c99 implicit c89