我正在调用一个打印有值的函数,但是在调用前添加unique
时,该函数未提供正确的(或任何)输出。
我尝试了各种方法
void
输出为:-
#include <stdio.h>
void func1();
void func2();
void func1()
{
printf("Inside func1()\n");
}
void func2()
{
printf("Inside func2()\n");
}
int main()
{
void func1();
void func2();
printf("Inside main()\n");
return 0;
}
在调用Inside main
和void
之前删除func1
时,输出将更改。
func2
输出为:-
#include <stdio.h>
void func1();
void func2();
void func1()
{
printf("Inside func1()\n");
}
void func2()
{
printf("Inside func2()\n");
}
int main()
{
func1();
func2();
printf("Inside main()\n");
return 0;
}
谁能解释Inside func1
Inside func2
Inside main
如何影响期望的输出?
答案 0 :(得分:4)
void func1();
中的语句main
是函数声明。这是运行时禁止操作的内容。
func1();
实际上会调用该函数。
这就是语言语法的工作原理,仅此而已。如果您考虑一下,那将非常聪明。
答案 1 :(得分:2)
在这种情况下,void func1();
不是对函数的调用,仅表示:在某个地方可能存在带有此签名的函数,即使没有声明它为正向,我也要使用它。通常我们将其称为function declaration,我们不在main
内使用它,而是在文件的开头。
答案 2 :(得分:0)
函数声明是用于告知编译器函数名称,返回类型和参数的操作。
例如:-Public Function getParam(Series As String, StartDate As Date, Parameters As Range) As Variant
Dim IndexRow As Double, IndexColumn As Double
On Error Resume Next
IndexRow = Application.WorksheetFunction.Match(CDbl(StartDate), Parameters.Columns(1), 0)
IndexColumn = Application.WorksheetFunction.Match(Series, Parameters.Rows(1), 0)
On Error GoTo 0
If IndexRow > 0 And IndexColumn > 0 Then
getParam = Parameters.Cells(IndexRow, IndexColumn)
Else
getParam = CVErr(xlErrNA)
End If
End Function
函数定义提供函数的实际主体。 例如:-
void func1();
要调用一个函数,只需将所需的参数与函数名称一起传递,如果函数返回一个值,则可以存储返回的值。
例如:-void func1()
{
printf("Inside func1()\n");
}
答案 3 :(得分:0)
声明总是以类型名称开头。当你写
int func();
您要向编译器声明您有一个函数,该函数接受未指定数量的参数并返回int
(因此编译器知道这一点)。
写作时
func();
您要告诉编译器在正常执行语句中执行函数func();
并丢弃其结果。
总是有一条C语句 以类型标识符开头 ,这不是要执行,而是要通知编译器这种东西的存在(声明它)
在您的示例中,您将main()
开头的两个声明更改为执行语句。这样,编译器生成了执行这些代码的代码,从而导致执行时得到输出。