【发布时间】:2020-01-07 07:14:35
【问题描述】:
根据Linux手册页1和2,函数syslog有两个不同的函数声明如下:
int syslog(int type, char *bufp, int len);
void syslog(int priority, const char *format, ...);
但是,除了 C++,C 中没有函数重载。
如何解释这个事实?
【问题讨论】:
标签: c++ c linux overloading glibc
根据Linux手册页1和2,函数syslog有两个不同的函数声明如下:
int syslog(int type, char *bufp, int len);
void syslog(int priority, const char *format, ...);
但是,除了 C++,C 中没有函数重载。
如何解释这个事实?
【问题讨论】:
标签: c++ c linux overloading glibc
一个在手册页 (*) 的第 2 节 (syslog(2)) 中定义,因此是系统调用。另一个来自第 3 节 (syslog(3)),因此是一个 C 库函数。
所以“技术上”它们是碰巧具有相同名称的不同函数(尽管它们当然是相关的,因为 (3) 使用的是 (2))。
(*) 见manual page sections。
第一个是系统调用不是c函数,它被包裹在函数klogctl中,第二个是c函数。
调用系统调用比 simply invoking a function 复杂得多,手册页中的声明只是一个快捷方式,以程序员熟悉的语法向您显示系统调用名称和它期望的参数。
【讨论】: