Передача указателя на putchar в функцию, принимающую int (*)(int)

Мне интересно, есть ли что-нибудь неправильное в передаче указателя на 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, и не смог найти ничего, что указывало бы на то, законно это или нет.

Спасибо.

7
задан DanielH 18 December 2011 в 14:47
поделиться