【问题标题】:Type-compatibility conventions and function declarations类型兼容性约定和函数声明
【发布时间】:2014-04-07 16:48:22
【问题描述】:

概念问题。考虑以下代码:

#include<stdio.h>

int brasa(int, float); 
int brasa(int, int); 
float brasa(int, int);

int main(){

return 0;
}

编译器给出以下错误:

Line 4: error: conflicting types for 'brasa'
Line 3: note: previous declaration of 'brasa' was here
Line 5: error: conflicting types for 'brasa'
Line 3: note: previous declaration of 'brasa' was here

那是什么类型的消息? 另一个概念性问题:这三个声明all是否声明了相同的函数?

【问题讨论】:

  • "那是什么信息?"这是一条错误消息,告诉您代码中存在错误。 “这三个声明是否都声明了相同的功能?”从概念上讲,不,它们都没有声明任何东西,因为代码无法编译。你可以说第一个声明了一些东西,而其他的都是错误,但是如果代码没有编译,那真的没关系......
  • 为什么违反了类型兼容性约定?
  • “类型兼容性约定”在函数声明中不起作用。正如@hacks 在他的回答中提到的那样,C 只允许对具有特定名称的函数进行一次声明,而不会对不同的参数/返回类型进行重载。 float f = 1; 是另一回事 - 这就是类型兼容性很重要的地方,编译器会根据需要自动插入适当的转换...

标签: c types function-declaration


【解决方案1】:

在 C 中,您不能声明具有不同类型(不兼容类型)的变量/函数 multiple times。与 C++ 不同,C 中没有函数重载。

【讨论】:

  • @KeithThompson;嘿,这是什么原因?我尝试使用全局变量,它也可以工作!
  • 你可以有多个声明,只要它们是兼容的。 OP 代码中的问题是声明不兼容。 (我不确定这是确切的技术术语,但标准中指定了规则。)您不能有多个定义
  • 但这在局部变量的情况下并不成立。
  • @KeithThompson;我得到了答案。我改变了我的话。感谢您的吹毛求疵:)
猜你喜欢
  • 1970-01-01
  • 2013-05-02
  • 2023-03-12
  • 2019-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
  • 2021-12-15
相关资源
最近更新 更多