繁体   English   中英

function [-Wimplicit-function-declaration] 的隐式声明

[英]implicit declaration of function [-Wimplicit-function-declaration]

我是 C 编程的新手,我正在制作一个 C 程序,以查找学生使用单个 ZC1C425268E68385D1AB5074C17A94F14 在三个科目中获得的分数的平均值和百分比。 我的代码是:

#include <stdio.h>
int main()
{
    float aver, per, mark1, mark2, mark3;
    printf("Enter the marks of subject 1: ");
    scanf(" %f", &mark1);
    printf("Enter the marks of subject 2: ");
    scanf(" %f", &mark2);
    printf("Enter the marks of subject 3: ");
    scanf(" %f", &mark3);
    averper(mark1, mark2, mark3, &aver, &per);
    printf("The average of marks entered by you = %f\n", aver);
    printf("The percentage of marks entered by you = %f", per);
    return 0;
}
float averper(float a, float b, float c, float *d, float *e)
{
    float sum = a + b + c;
    *d = sum / 3;
    *e = (sum / 300) * 100;
}

得到的错误是:

main.c: In function ‘main’:
main.c:11:2: warning: implicit declaration of function ‘averper’ [-Wimplicit-function-declaration]
  averper(mark1, mark2, mark3, &aver, &per);
  ^~~~~~~
main.c: At top level:
main.c:16:7: error: conflicting types for ‘averper’
 float averper(float a, float b, float c, float *d, float *e)
       ^~~~~~~
main.c:11:2: note: previous implicit declaration of ‘averper’ was here
  averper(mark1, mark2, mark3, &aver, &per);
  ^~~~~~~ 

谢谢

程序中的缺陷:

  1. 在定义 function 签名之前使用 function 或在代码顶部直接使用 function。

  2. function 不返回任何内容,如果程序设计为返回,但该值无处使用。


试试这个方法:

#include <stdio.h>

typedef struct { // declaring a struct to return avg and per together
    float avg;
    float per;
} averS;

averS averper(float, float, float, float *, float *); // function signature

int main()
{
    float aver, per, mark1, mark2, mark3;

    printf("Enter the marks of subject 1: ");
    scanf(" %f", &mark1);

    printf("Enter the marks of subject 2: ");
    scanf(" %f", &mark2);

    printf("Enter the marks of subject 3: ");
    scanf(" %f", &mark3);

    averS s = averper(mark1, mark2, mark3, &aver, &per); // holding values

    printf("The average of marks entered by you = %f\n", s.avg);
    printf("The percentage of marks entered by you = %f", s.per);

    return 0;
}

averS averper(float a, float b, float c, float *d, float *e)
{
    averS as; // declaring a local structure for returning value purpose.

    float sum = a + b + c;

    as.avg = sum / 3;
    as.per = (sum / 300) * 100;

    return as; // returning the struct
}

在这里,我们使用了一个struct ,它保存两个值并将它们一起返回,然后在main()中使用它们。


编译成功后会出现 output 类似:

Enter the marks of subject 1: 10 // --- INPUT
Enter the marks of subject 2: 20
Enter the marks of subject 3: 30
The average of marks entered by you = 20.000000 // --- OUTPUT
The percentage of marks entered by you = 20.000000

这是否仅适用于 C99 或更高版本?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM