-4

在 C 中,我尝试从 main 调用函数 printSum。但主要功能不是调用 printSum,它只是打印出“嗨!” 这是来自 main 的打印语句。我不确定为什么不调用 printSum。谢谢。

代码:

int main(void){

  void printSum(void);
  printf("Hi!\n");

  return 0;
}

void printSum (void){
  printf("Please give two integers\n");
    int x,y;
  scanf("%d %d", &x,&y);
  printf("%d + %d is %d\n",x,y,x+y);
}

山姆

4

6 回答 6

8

您再次定义了它。只需从功能中删除空白即可。包含一个前向声明的标题,以便它能够识别它..

void printSum (void); <-------------------

int main(void){

  printSum();         <-------------------------
  printf("Hi!\n");

  return 0;
}

void printSum (void)
{
  printf("Please give two integers\n");
  int x,y;
  scanf("%d %d", &x,&y);
  printf("%d + %d is %d\n",x,y,x+y);
}
于 2013-05-17T21:03:11.800 回答
3

看起来您刚刚开始使用 C。希望您对其他语言有一些经验,因为 C 的学习曲线很陡峭。无论如何,重要的是要注意一些关于 C 的事情。首先是void printSum(void);真正的含义。分解它:

无效打印总和(无效);

这声明了一个返回签名。换句话说,函数返回给你的东西。在 C 中,这个词的void基本意思是“没有变量”。请记住这一点。为什么?因为C还有一个类似的词,NULL. NULL意思是“没有价值”。这是另一种看待它的方式。

一些有效变量:int, float, bool,void 一些有效值:1, 'c', 2.0f,NULL

实际上,NULL实际上只是数字0。字面上地。NULL == 0将返回真。

继续...

无效打印总和(无效);

这定义了项目的名称。

无效打印总和无效

括号表示这是一个函数。

无效打印总和(无效);

这表示正在传递到系统中的变量。所以这可能是 int、float 等。

无效打印总和(无效)

分号表示语句的结束。解释这个概念有点棘手,但只要把它想象成一个句子。

现在,这里最重要的是第一个void. 如果你告诉 C 函数返回什么类型的东西,它假定你在谈论函数,而不是实际调用它。省略第一个 void 会使 C 尝试运行函数而不是定义声明它。

定义函数和声明函数之间的区别很有趣,最好在您更习惯于 C 时保存。

于 2013-05-17T21:16:55.513 回答
2

您的程序不调用printSum,它只是声明它。更改此行:

void printSum(void);

printSum();

如果您的函数在源文件中的顺序与您将它们放在这里的顺序相同,您还需要转发声明或移动printSum上面的实现main以使其正确。

您可能应该考虑购买一本初学者的 C 书。

于 2013-05-17T21:03:11.107 回答
2
void printSum(void);

实际上并不调用该函数,它只是声明它存在。您需要这样做,以便编译器知道如何调用它,即使它尚未定义,因此请保留该行。但要实际调用该函数,您需要:

printSum();
于 2013-05-17T21:04:19.893 回答
0

因为您只是在声明它,而不是实际调用该函数。要调用该函数,您只需要函数名称和参数列表,在本例中为空:

printSum();
于 2013-05-17T21:03:01.477 回答
0

以下:-

void printSum(void);

不是函数调用。它是一个函数声明。

printSum();

是一个函数调用。您还应该在 main 之前转发声明该函数。

于 2013-05-17T21:03:55.203 回答