当我尝试调用函数时,它显示错误

when i try to call a function it shows error

提问人:JOJO100 提问时间:7/4/2022 最后编辑:JensJOJO100 更新时间:7/4/2022 访问量:82

问:

我对编码很陌生。我使用了一个简单的代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
   Sayhi();
   return 0;
}

void Sayhi()
{ 
   printf("hi");
}

因此,当我编译代码时,它说函数“sayhi”未在此范围内声明。 我什至尝试了使用“void”作为函数的不同代码,但它不起作用。

c 语法错误

评论

1赞 Martin James 7/4/2022
将 ' Sayhi()' 函数放在 main() 之上。另外,请将代码格式化为代码:(
0赞 Irelia 7/4/2022
你忘了原型Sayhi()
2赞 Oka 7/4/2022
这回答了你的问题吗?定义和声明有什么区别?
1赞 Jens 7/4/2022
@xing 这不是一个原型,而是一个老式的函数声明。OP 应使用 Oh, andvoid sayHi(void);int main(void) {...}
1赞 Steve Summit 7/4/2022
@JOJO100与您的问题无关,但与此无关:养成打字的习惯。您通常希望在每行的末尾都有一个换行符。printf("hi\n");

答:

1赞 paulsm4 7/4/2022 #1
  • 这应该可以工作 - 只需在使用它之前声明并定义“Sayhi()”:

    #include <stdio.h>
    #include <stdlib.h>
    
    void Sayhi();
    { 
       printf("hi");
    }
    
    int main()
    {
       Sayhi();
       return 0;
    }
    
  • 一个“更好”的方法是为“Sayhi()”创建一个原型:

    #include <stdio.h>
    #include <stdlib.h>
    
    void Sayhi(void);
    
    int main()
    {
       Sayhi();
       return 0;
    }
    
    void Sayhi();
    { 
        printf("hi");
    }
    

问:那么什么是“原型”?

https://www.programiz.com/c-programming/c-user-defined-functions

函数原型只是一个函数的声明, 指定函数的名称、参数和返回类型。事实并非如此 包含函数体。

函数原型向编译器提供以下信息: 函数稍后可能会在程序中使用。

原型应始终列出函数的参数。如果没有参数,则应列出“void”。

随着应用程序大小和复杂性的增加,原型的价值就会大放异彩。您需要将代码移出“main()”并移动到单独的 .c 源文件(例如“mycomponent.c”)和相应的头文件(例如“myheader.h”)中。

另外需要注意的是:您应该始终对原型中的变量进行 NAME 命名(例如 .void myfunc(int i);

问:您是否了解为什么会出现编译错误(在使用函数之前需要以某种方式声明该函数),以及如何修复它?

评论

4赞 aschepler 7/4/2022
void Sayhi();不是一个原型,而是一个危险的声明,允许传递参数。 是一个原型。void Sayhi(void);