无效,影响程序的输出

时间:2019-07-03 09:51:47

标签: c linux gcc

我正在调用一个打印有值的函数,但是在调用前添加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 如何影响期望的输出?

4 个答案:

答案 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()开头的两个声明更改为执行语句。这样,编译器生成了执行这些代码的代码,从而导致执行时得到输出。