Я бы использовал макрос. Он более распространен и более идиоматичен и сталкивается с меньшим количеством проблем при пересечении единиц перевода (т. Е. Вам не нужно беспокоиться об объявлении макростатической статики).
Кроме того, используя указатель на функцию, вы предотвращаете встраивание в большинстве компиляторов.
Наконец, с помощью указателя функции клиенты могут сделать это:
int evil(const int bgr) { /* Do something evil */ }
bgr2rgb = evil
Конечно, они, вероятно, этого не хотят, но, возможно, в этой строке может быть переменная с именем, аналогичным bgr2rgb
, где требуется только одна опечатка ....
Макрос безопаснее, хотя я бы определил его таким образом - здесь нет необходимости в подобном функции макросе:
#define bgr2rgb rgb2bgr