2812中断向量赋值的问题

来源:百度知道 编辑:UC知道 时间:2024/05/21 07:34:32
今日看到一段程序:
PieVectTable.TINT0 = &ISRTimer0;

。。。。。。

interrupt void ISRTimer0(void)

其中TINT0为类型:PINT。另外还有:
typedef interrupt void (* PINT)(void);
interrupt为中断函数声明。
请问:为什么ISRTimer0这个函数名本身不就是指向函数首地址的指针吗?
为什么在第一行赋值是还要加取地址运算符啊。

问得好。取地址运算符可以加,也可以不加,你可以把它去掉,编译仍然可以通过,而且代码可以正常运行。
这是ccs编译器决定的,编译器不一定完全按照ANSI C标准来设计,但按照ANSI C标准编写的代码肯定是可以编译通过的。