2016-08-03 81 views
1

遇到了我不確定如何定義原型的正確方法。 It's容易,只需看一個簡單的例子:正確定義原型的方法

文件AC:

#define foo bar 

void mon() { 
    foo(); 
} 

文檔BC:

void bar() { 
    Do something; 
} 

給出如下警告:

警告:功能不具備一個完整的原型

通常我會解決它:

extern void foo(void); 

但是作爲示例顯示,該函數並不完全存在,而是被定義爲指向另一個函數。爲此製作原型的正確方法是什麼?

+0

它沒有被定義爲指向另一個函數。這是一個預處理指令,用於指定令牌替換。該函數根本沒有聲明。 – StoryTeller

+1

'#define foo bar'你究竟想要做什麼? –

+0

@Lightness在軌道上的比賽,嘿,我不想做任何事情。這個警告來自於Umon引導程序,所以我只是想「糾正」他們的思維方式 – Pedersen

回答

0

如果編譯器遇到聲明extern void foo(void);#define foo bar爲同一個源文件後,它會分析它作爲extern void bar(void);,並且鏈接器將只解決bar符號。

請注意,您對bar的定義與上述聲明不符。的bar定義應爲:

void bar(void) { 
    // Do something; 
} 
用C

,不像C++的(void)參數列表是空的參數列表稍有不同。

+0

嘿,謝謝!這實際上是有道理的。所以正確的做法是照我一直做的做 – Pedersen

相關問題