【问题标题】:Why does a variable of a function declared outside its function definition doesn't throw an error? [duplicate]为什么在其函数定义之外声明的函数的变量不会引发错误? [复制]
【发布时间】:2016-06-01 09:07:13
【问题描述】:

为什么这个带有整数声明的代码在中间(函数定义之间)没有抛出错误?

1) 为什么它在语法上是正确的。
2)这样做有什么用。?


#include <stdio.h>  
void func(int, int);
int main()
{
     int a, b;
     a = 10;
     b = 20;
     func(a, b);

     return 0;
}
void func(i, j)
int i,j;                  //why does this doesn't throw error.
{
     printf("a = i = %d\nb = j = %d\n", i, j);
}

【问题讨论】:

  • 正如下面的回答,它在语法上是正确的,因为它是有效的——它是做事的原始方式。除非您碰巧使用不支持 ANSI C 的 K&R 风格的编译器,否则现在使用此语法没有任何用处。
  • 不要永远为以 K&R 风格定义的函数提供原型。要找出原因,请将函数原型和定义中的 int 更改为 char

标签: c syntax kernighan-and-ritchie function-definition


【解决方案1】:

TL;DR - K&R 风格。

在您的代码中

void func(i, j)
int i,j; {

不会抛出错误,因为它曾是(唯一)一个有效的语法,从前。

目前不无效,但不再使用。

如果您愿意,可以阅读有关K&R style syntax here 的更多信息。

【讨论】:

    【解决方案2】:

    这个

    void func(i, j)
    int i,j; //declare types of arguments
    {
      //function body
    }
    

    称为K&R 语法。它已经过时了,但仍在一些 C 项目中使用,例如 bash

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-16
      • 2018-11-10
      • 1970-01-01
      • 2019-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多