Мне интересно, есть ли что-нибудь неправильное в передаче указателя на 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;
}
У меня нет никаких проблем с компиляцией этого с помощью GCC и Clang под GNU/Linux, а также GCC под OpenBSD. Мне интересно, будет ли это иметь такое же поведение в любой другой реализации, соответствующей стандарту, поскольку putchar может быть реализован как макрос. Я просмотрел стандарт, особенно разделы, посвященные указателям функций и putchar, и не смог найти ничего, что указывало бы на то, законно это или нет.
Спасибо.