静态成员函数和extern“C”链接函数有什么区别?例如,当在C++中使用“makecontext”时,我需要传递一个指向函数的指针。 Google建议使用extern“C”链接,因为“makecontext”是C.但是我发现使用静态作品也是如此。我只是幸运还是...static vs extern“C”/“C++”
class X {
public:
static void proxy(int i) {}
}
makecontext(..., (void (*)(void)) X::proxy, ...);
VS
extern "C" void proxy(int i) {}
makecontext(..., (void (*)(void)) proxy, ...);
编辑:你能告诉编译器或体系结构,其中的静态成员的版本不工作(和它不是在编译器中的错误) ?
`我很抱歉,但我仍然不相信......什么?标准比一些编译器的巧合实现定义的行为更具授权的事实? – 2017-03-12 17:23:20
这是一个旧帖子(8年前今天)我的观点是当时像恕我直言,如果每个现有的实施不同于标准,那么也许你应该问是否是标准是错误的问题。我正在寻找无法运行的平台示例。 – 2017-03-14 06:36:40
够公平的。对于C或C++标准来说,包含所有现有编译器忽略的意想不到的结果当然是前所未有的。这是我目前最喜欢的:http://stackoverflow.com/a/42335543/2757035但是在这种情况下,我认为标准很清楚地说明它的含义,并且实现可能随时改变它们的行为,如果有的话有一些优势。 – 2017-03-14 09:46:17