gpt4 book ai didi

c - 为什么 typedef void (*f_ptr)(int);和 typedef void (*f_ptr)();在 C 中工作一样吗?

转载 作者:行者123 更新时间:2023-12-05 05:06:56 26 4
gpt4 key购买 nike

我在定义函数指针时不小心忘了加上(int),我的程序仍然运行。我想知道是否有任何情况下它不起作用。我的代码:

#include <stdio.h>

void f1(int var)
{
printf("this is f1 and var is: %d\n", var);
}

void f2(int var)
{
printf("this is f2 and var is: %d\n", var);
}

void f3(int var)
{
printf("this is f3 and var is: %d\n", var);
}
typedef void (*f_ptr)(int);
// pq eu poderia escrever: typedef void (*f_ptr)(); e o programa funcionaria normalmente?
typedef int n_casa;

int main()
{
f_ptr ptr[] = {f1, f2, f3};

int c = 0;
while (c < 3)
{
ptr[c](c);
++c;
}

return 0;
}

typedef void (*f_ptr)(int);typedef void (*f_ptr)(); 都在我的程序中工作。

最佳答案

它们是不同的。

typedef void (*f_ptr)(int) 声明了一个函数指针,它只接受一个 int 参数,并且不返回任何内容。

虽然对于 typedef void (*f_ptr)(),函数指针采用未指定数量的参数,并且不返回任何内容。

According to the SEI CERT C Coding Standard , 建议在函数不接受任何参数时显式指定 void

关于c - 为什么 typedef void (*f_ptr)(int);和 typedef void (*f_ptr)();在 C 中工作一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59583551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com