我在想是否将指向putchar的指针,或任何其他可实现为宏的标准函数,传递给接受函数指针的函数是否有问题。以下是我正在进行的示例。
我在GNU / Linux下使用GCC和Clang,以及在OpenBSD下使用GCC编译时没有任何问题。 我想知道在每个其他符合标准的实现中是否会具有相同的行为,因为putchar可以实现为宏。 我已经搜索过标准,特别是函数指针和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的部分,但没有找到任何说明其是否合法的内容。
谢谢。
gcc
中,这似乎是预期的行为:http://gcc.gnu.org/onlinedocs/cpp/Function_002dlike-Macros.html - RageD