我想知道将指向 putchar 的指针或任何其他可以作为宏实现的标准函数传递给接受函数指针的函数是否有什么问题。下面是我正在做的一个例子。

#include <stdio.h>

static int print(const char *s, int (*printc)(int))
{
        int c;

        while (*s != '\0') {
                if ((c = printc(*s++)) < 0)
                        return c;
        }
        return printc('\n');
}

int main(void)
{
        print("Hello, world", putchar);
        return 0;
}

我在 GNU/Linux 下用 GCC 和 Clang 以及 OpenBSD 下的 GCC 编译它没有任何问题。我想知道它是否会在所有其他符合标准的实现下具有相同的行为,因为 putchar 可以作为宏实现。我搜索了标准,特别是关于函数指针和 putchar 的部分,但没有找到任何说明这是否合法的内容。

谢谢。

最佳答案

继我与@pmg 基于评论的讨论之后,我找到了标准的相关部分(C99,7.1.4 p.1):

关于c - 将指向 putchar 的指针传递给接收 int (*)(int) 的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8552484/

10-11 19:10