在C中声明一个void函数

耶利基斯

我正在学习C并且正在研究函数。因此,我读到实现自己的函数时,必须在main()之前声明它。如果我错过了声明,编译器将收到一条错误消息。

在我研究此示例时(发现数字是否为质数),

#include <stdio.h>

void prime();               // Function prototype(declaration)

int main()
{
   int num, i, flag;

   num = input();            // No argument is passed to input()

   for(i=2,flag=i; i<=num/2; ++i,flag=i)
   {
      flag = i;

      if(num%i==0)
      {
         printf("%d is not prime\n", num);
         ++flag;
         break;
      }
   }

  if(flag==i)
     printf("%d is prime\n", num);

  return 0;

}

int input()  /* Integer value is returned from input() to calling function */
{
    int n;
    printf("\nEnter positive enter to check: ");
    scanf("%d", &n);
    return n;
 }

我注意到已经声明了函数prime(),但主要是调用了函数input(),并在底部实现了函数input()。好的,我认为这是一个错误,我将名称从prime更改为input。

但是,如果删除了声明,但未在其中放置任何内容,则该程序将正确编译,并且运行平稳。(我在Ubuntu上编译并运行它。)

是否有必要声明不带参数的void函数?

内曼娅·波里奇

如果在使用位置之前没有函数的前向声明,则编译器将为您创建带符号的隐式声明int input()它将使用您调用的函数的名称,并假定该函数正在返回int,并且可以接受任何参数(如Bartek在注释中指出的)。

对于此函数,隐式声明与真实声明匹配,因此您没有问题。但是,您应对此始终保持谨慎,并且始终应首选使用前向声明,而不要使用隐式声明(无论它们是否相同)。因此,不仅要对void prime()函数进行正向声明(假设您将在某处使用它),还应该对进行正向声明int input()

要查看如何传递任意数量的参数,请考虑以下事项:

#include <stdio.h>

// Takes any number of the arguments
int foo();

// Doesn't takes any arguments
int bar(void)
{
    printf("Hello from bar()!\n");
    return 0;
}

int main()
{
    // Both works

    // However, this will print junk as you're not pushing
    // Any arguments on the stack - but the compiler will assume you are
    foo();

    // This will print 1, 2, 3
    foo(1, 2, 3);

    // Works
    bar();

    // Doesn't work
    // bar(1, 2, 3);

    return 0;
}

// Definition
int foo(int i, int j, int k)
{
    printf("%d %d %d\n", i, j, k);
    return 0;
}

因此,在函数定义中,您正在描述函数参数。但是,函数的声明告诉编译器不要对参数进行任何检查。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C-在函数中声明一个函数并返回

来自分类Dev

在C ++中声明一个operator +函数

来自分类Dev

为什么要在C中声明一个函数?

来自分类Dev

从void函数返回到另一个void函数在C ++中合法吗?

来自分类Dev

C ++:在另一个函数中声明一个函数有什么用?

来自分类Dev

在另一个函数中声明的跟踪函数

来自分类Dev

我们可以在C中与变量一起声明一个函数吗?

来自分类Dev

如何声明函数一次传递一个参数argv [i]?在C中

来自分类Dev

在C中多次声明一个函数有什么意义?

来自分类Dev

C ++前向声明类在嵌入类中的一个朋友函数

来自分类Dev

在C中多次声明一个函数有什么意义?

来自分类Dev

如何在C++中声明一个外部cuda函数模板

来自分类Dev

从私有void函数c#中的另一个类访问变量

来自分类Dev

在定义它之前在Swift中声明一个函数

来自分类Dev

在JavaScript类中声明一个公共的“静态”函数

来自分类Dev

在函数内部声明一个全局对象(C ++)

来自分类Dev

声明类型既不是“ void”也不是“ any”的函数必须返回一个值

来自分类Dev

如何在void函数中扫描并在main函数中得出结果以在C中的另一个void中使用?

来自分类Dev

C++ typedef 函数指针并在一个语句中声明一个指针

来自分类Dev

在C ++复制构造函数中将值从一个void **复制到另一个void **

来自分类Dev

如何声明一个指向:的void指针数组的指针?在C

来自分类Dev

在C ++中声明一个指针数组

来自分类Dev

在C中声明一个长度可变的数组

来自分类Dev

在C ++中声明一个指针数组

来自分类Dev

C / C ++:使用类型定义的函数指针来*声明*一个函数

来自分类Dev

如何独立于 C++ 中声明的位置在另一个类函数中使用类?

来自分类Dev

如何访问一个函数在另一个函数中定义和声明的数组?

来自分类Dev

TypeScript错误(角度):声明类型既不是“ void”也不是“ any”的函数必须返回一个值

来自分类Dev

一个文件中的C ++成员类声明。在另一个实施

Related 相关文章

  1. 1

    C-在函数中声明一个函数并返回

  2. 2

    在C ++中声明一个operator +函数

  3. 3

    为什么要在C中声明一个函数?

  4. 4

    从void函数返回到另一个void函数在C ++中合法吗?

  5. 5

    C ++:在另一个函数中声明一个函数有什么用?

  6. 6

    在另一个函数中声明的跟踪函数

  7. 7

    我们可以在C中与变量一起声明一个函数吗?

  8. 8

    如何声明函数一次传递一个参数argv [i]?在C中

  9. 9

    在C中多次声明一个函数有什么意义?

  10. 10

    C ++前向声明类在嵌入类中的一个朋友函数

  11. 11

    在C中多次声明一个函数有什么意义?

  12. 12

    如何在C++中声明一个外部cuda函数模板

  13. 13

    从私有void函数c#中的另一个类访问变量

  14. 14

    在定义它之前在Swift中声明一个函数

  15. 15

    在JavaScript类中声明一个公共的“静态”函数

  16. 16

    在函数内部声明一个全局对象(C ++)

  17. 17

    声明类型既不是“ void”也不是“ any”的函数必须返回一个值

  18. 18

    如何在void函数中扫描并在main函数中得出结果以在C中的另一个void中使用?

  19. 19

    C++ typedef 函数指针并在一个语句中声明一个指针

  20. 20

    在C ++复制构造函数中将值从一个void **复制到另一个void **

  21. 21

    如何声明一个指向:的void指针数组的指针?在C

  22. 22

    在C ++中声明一个指针数组

  23. 23

    在C中声明一个长度可变的数组

  24. 24

    在C ++中声明一个指针数组

  25. 25

    C / C ++:使用类型定义的函数指针来*声明*一个函数

  26. 26

    如何独立于 C++ 中声明的位置在另一个类函数中使用类?

  27. 27

    如何访问一个函数在另一个函数中定义和声明的数组?

  28. 28

    TypeScript错误(角度):声明类型既不是“ void”也不是“ any”的函数必须返回一个值

  29. 29

    一个文件中的C ++成员类声明。在另一个实施

热门标签

归档