c中用户定义函数的冲突类型

AL-*_*ami -1 c dev-c++

经过很长一段时间我在c工作.我必须实现三个功能,包括

  1. 得到一个数字并显示一半

2.获取数字的平方

3.获取两个数字并显示它们的总和和消除.

我正在使用devC++,当我编译代码时,我得到了标题中提到的conflict type if squareInput错误.这里有什么问题:

#include<stdio.h>
#include<conio.h>
int main(){

    float x;
    printf("enter a number\n");
    scanf("%f",&x);

    //TASK 1 : display half of the number 
    pirntf("half of x is = %.3f",x);

    //TASK 2 : square of number 

    squareInput(x); //call square function from here

    // TASK 3 : get two numbers and display both summation and sabtraction

    float num1,num2;   // declare two floating number( floating numbers can hold decimal point numbers
    printf("enter num1 \n");
    scanf("num1 is =%f",&num1);
    printf("enter num2 \n");
    scanf("num2 is =%f",num2);
    calculate(num1,num2);// call calculate function

    getch();
}

float squareInput(float input){

    float square=input*input;
    printf("\n square of the number is %.3f \n",square);
    return 0;
}

float calculate(float num1,float num2){

    //summation
    float summation= num1+num2; // declare antoher variable called summation to hold the sum 
    //sabtraction
    float sabtraction=num1-num2;

    printf("summation is %.2f \n",summation);
    printf("sabtraction is %.2f \n",sabtraction);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

nal*_*zok 6

没有原型就会出问题.加

float squareInput(float input);
float calculate(float num1,float num2);
Run Code Online (Sandbox Code Playgroud)

在前面int main().

如果在调用之前没有声明函数,则编译器将其假定为int返回函数.但是,squareInput()返回float,因此编译器(或链接器)可能会向您抱怨.

还要注意定义是声明(但反之亦然,显然),因此移动它们被调用的位置squareInput()calculate()前面的定义也起作用.

  • @ AL-zami:因为如果您使用的是C99或C11,则不允许在范围内没有声明的情况下使用函数,如果您被C89/C90拖延时间,则将假定未声明的函数返回`int`(当调用函数时,你的`float`值将被转换为`double`),但这不是正确的返回类型. (4认同)

dbu*_*ush 5

那时的你打电话squareInputcalculate他们尚未确定.所以C假设一个隐含的声明int squareInput()int calculate().这些隐式声明与这些函数的定义冲突.

您可以通过在以下情况之前为每个函数添加声明来解决此问题main:

float squareInput(float input);
float calculate(float num1,float num2);
Run Code Online (Sandbox Code Playgroud)

或者之前简单地移动功能main.