c - 这是编译器中的错误还是 C 正常工作方式?

标签 c

我使用的是针对 8 位微 Controller 的 XC8 编译器。

这不会产生任何警告或错误,但无论如何都会挂起微 Controller :

    uint8_t some_array[4];
    uint8_t        // no compile errors at all
    some_function();

我注意到的另一件事是,预计这不会使微 Controller 崩溃,并且似乎返回 0:

printf("%c", some_function); 

在这个函数中,我调用了一个永远不会返回 0 的函数。我忘记添加 () 但它会编译并以某种方式运行,但返回值错误。

最佳答案

看这里:Why is using the function name as a function pointer equivalent to applying the address-of operator to the function name?

函数的名称就是它的地址。(在这一点上,C 和 C++ 是相同的)。就像数组的名称就是它的起始地址一样。

& 用于获取变量的地址,但函数名称已经是地址。所以我们这里不需要“&”。

关于c - 这是编译器中的错误还是 C 正常工作方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29732458/

相关文章:

c - switch 语句只返回默认大小写,无论我输入什么大小写值

c - 如何将C中的框居中?

c - 自定义查找/替换对话框

C++ .ignore 给出错误 "This declaration has no storage class or type specifier"

c - STM32 USB CDC 不工作

c - 清除数组中重复项的函数

c - 如何终止嵌套循环

c - struct.field 返回另一个值,为什么?

c - 使用结构体指针读取成员变量

c - 在 C 中重新声明变量