我正在使用针对8位微控制器的XC8编译器。
这不会产生任何警告或错误,但无论如何都会挂起微控制器:
uint8_t some_array[4];
uint8_t // no compile errors at all
some_function();
我注意到的另一件事是,期望这个不会使微控制器崩溃,并且似乎返回0:
printf("%c", some_function);
在这一个中,我正在调用一个永远不会返回0的函数。我忘记添加()但它编译并以某种方式运行,但返回值错误。
答案 0 :(得分:1)
函数的名称只是它的地址。(在这一点上,C和C ++是相同的)。就像数组的名称是它的起始地址一样。
&
用于获取变量的地址,但函数名称已经是地址。所以我们不需要'&'这里。
答案 1 :(得分:0)
编译器会忽略不可打印的字符(例如空格,换行符和制表符),因此第一个示例不会产生编译错误,虽然不会产生运行时错误,因此崩溃的原因是其他原因。
在第二个示例中,大括号缺失必须产生编译错误。如果没有,则是编译器问题。