C++ 将函数声明为static和extern“;";

C++ 将函数声明为static和extern“;";,c++,gcc,static,C++,Gcc,Static,我可以将一个函数声明为静态的,并且在一行中有外部“C”链接吗 例如,使用GCC,我可以做到: extern "C" { static void MyHandler (void) { // some code here } } 而且它做的正是我想要它做的 然而,出于美学原因,我不喜欢外部的“C”{}块 我还可以写: extern "C" void MyHandler (void) { ... 或 但如果我把它们结合起来,以下两种方法似乎都不起作用: extern "C

我可以将一个函数声明为静态的,并且在一行中有外部“C”链接吗

例如,使用GCC,我可以做到:

extern "C" {

  static void MyHandler (void)
  {
     // some code here
  }

}
而且它做的正是我想要它做的

然而,出于美学原因,我不喜欢外部的“C”{}块

我还可以写:

extern "C" void MyHandler (void) { ...

但如果我把它们结合起来,以下两种方法似乎都不起作用:

extern "C" static void MyHandler (void) {...
static extern "C" void MyHandler (void) {...

问:有没有一种方法可以在不使用显式外部“C”块的情况下组合这两个链接修饰符?

为什么
静态
如果应该在外部使用?但为什么要这样做?如果您需要以不混合的形式将函数导出到翻译单元之外,那么将函数标记为
extern“C”
是很有用的,但是如果将函数设置为
静态
,则会破坏这一目的,因为函数将不会被导出。@πάνταῥεῖ 该函数是嵌入式系统中的中断处理程序。链接器需要它是extern“C”。否则,他将无法将其放入中断向量表中。但是,我不希望除了硬件之外的任何人调用此函数,这就是为什么静态也很好。如果您将此函数声明为
static
,链接器实际上将无法使用它。链接器只能使用从翻译单元导出的符号,并且不会导出
静态
函数(在对象文件的任何符号表中都可能没有它的条目)。@JoachimPileborg好吧,你说得对!让我大吃一惊的是,在完全重建之后,它没有外部“C”就可以正常工作了!谢谢
extern "C" static void MyHandler (void) {...
static extern "C" void MyHandler (void) {...