gpt4 book ai didi

c - 为什么尝试在 main 中调用 void 函数时类型不兼容

转载 作者:行者123 更新时间:2023-11-30 20:00:41 25 4
gpt4 key购买 nike

我的程序非常简单,但我不明白为什么会收到此错误消息。

这是我的代码:

#include<stdio.h>

int main( ){
TriangularNumber();
}

//gets a range of numbers as input and prints all triangular numbers in range.

void TriangularNumber(){
int left,right,tempSquare;
scanf("%d", &left);
scanf("%d", &right);

for(int i=left;i<=right;i++){
tempSquare = 8*i + 1;
for(int j = 0;j<=tempSquare;j++){
if(tempSquare = j*j){
printf("%d is a triangular number",tempSquare);
}
}
}

这是我编译时的错误消息:

ex2.c:10 error: incompatible types for redefinition of 'TriangularNumber'

我只是想让 void 函数做她的事情,我正在做一项包含许多完全不同的任务的作业,我希望将它们分开,而不是一个困惑的 main 方法。

最佳答案

在旧版本的 C 中,如果编译器在看到函数的声明或定义之前看到函数调用,它将假定该函数返回 int。所以发生的事情是:

int main()
{
TriangularNumber( ); // no declaration or definition visible before this,
// compiler assumes TriangularNumber returns int
// (i.e., TriangularNumber is *implicitly* declared
// to return int)
...
}

void TriangularNumber( ) // Definition of TriangularNumber has different
{ // return type from the *implied* declaration
// above, compiler gets upset because the types
// don't match.

从 C99 开始,情况不再如此 - 不再允许隐式 int。在 C99 编译器下,您会收到类似“TriangleNumber 在使用前未声明”的不同错误。

在调用函数之前,函数声明必须可见。函数定义也充当声明,因此解决此问题的最简单方法是将 TriangleNumber 的定义移到 main 之前:

void TriangularNumber( void )
{
...
}

int main( void )
{
TriangularNumber( );
...
}

如果 TriangleNumber 是在单独的源文件中定义的,那么您将无法执行此操作;在 main 中调用之前,您需要在某处进行单独的声明。您通常会设置一个单独的头文件,其中包含如下声明:

/**
* t.h - header file for TriangularNumber module
*/
#ifndef T_H
#define T_H

void TriangularNumber( void );

#endif

/**
* t.c - implementation file for TriangularNumber module
*/
#include "t.h" // include the declaration; in case we've made a mistake
// and have a mismatch between the declaration and definition,
// we can catch that here as the compiler will yell at us

void TriangularNumber( void )
{
...
}

/**
* main.c - source file that needs to use TriangularNumber module
*/
#include "t.h" // makes sure declaration for TriangularNumber is visible

int main( void )
{
TriangularNumber( );
...
}

关于c - 为什么尝试在 main 中调用 void 函数时类型不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41046506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com