gpt4 book ai didi

c - 函数指针作为常量参数

转载 作者:行者123 更新时间:2023-12-01 13:22:17 25 4
gpt4 key购买 nike

是否可以将函数指针作为 const 参数传递?

我收到以下 gcc 错误:

warning: type defaults to 'int' in declaration of 'f' [-Wimplicit-int] void execute(void (const *f)(void));



...编译此代码时:
#include <stdio.h>

void print(void);
void execute(void (const *f)(void));

int main(void)
{
execute(print); // sends address of print
return 0;
}

void print(void)
{
printf("const!");
}

void execute(void (const *f)(void)) // receive address of print
{
f();
}

这不是 What is meaning of a pointer to a constant function? 的副本,它解决了 指向 const 函数 的指针,而不是 参数 const2004

最佳答案

你想要的语法是:

void execute(void (* const f)(void));
这表示 fconst指向不带参数的函数的指针( (void) 是无参数的特殊语法)并且不返回任何内容( void )。一个 const* 的右侧说 指针const .一个 const左侧显示指针 指向某事 const .
事实上,它是一个 const指针意味着你不会改变 f (分配一个新值)在函数中,如果你这样做,编译器应该给你一个错误(除非更改是隐藏的,它可以通过强制转换)。它没有说明函数本身——指向的函数不是 const在任何意义上,因为参数是 const .
当你写道:
void execute(void (const * f)(void));
const* 的左侧意味着指针指向的东西是 const , 而不是指针本身是 const .由于它说指针指向那里的某些东西而您没有列出特定类型,因此编译器警告您该类型丢失(并默认为 int )。

关于c - 函数指针作为常量参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49459633/

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