被调用的函数在 printf 工作但不在算术语句

Called function work at printf but not at arithmetic statement

我做了一个struct Triangle,我做了一个函数来计算p(perimeter/2)。 当我调用 printf 中的函数时,它起作用了。 但是当我调用同一个函数作为一个简单的算术语句时它不起作用并给我以下错误

called object 'p' is not a function or function pointer

源代码:

#include <stdlib.h>
typedef struct{
       int a, b, c;
} Triangle;
    
int perimeter (Triangle t){
    return t.a + t.b + t.c;
}
    
float p (Triangle t){
    return perimeter(t) / 2.0;
}
    
int main() {   
    Triangle t = {3, 4, 5};
    //float p = p(t);
    printf("p = %.2f\n",p(t));
    return 0;   
}

//float p = p(t);

函数和变量不能使用相同的名称。将 float p 更改为 float a,它应该可以工作。或者将您的函数重命名为 perimeter 而不是 p.

同样一般来说,函数最好使用稍长、清晰和描述性的名称。

float p = p(t);

定义了一个局部变量p,它隐藏了全局函数p。此变量的类型为 float,因此它不是函数或指针。

重命名变量以解决此问题。