我的庫包含一個同時用於內部和外部的函數。該函數非常小,我希望編譯器在調用internal時嘗試內聯函數。由於該功能使用不完整類型的信息,因此不能內聯外部呼叫。所以我的模塊也應該總是包含一個具有外部鏈接功能的副本。如何將函數定義爲C99中的內聯內部和外部副本
我想我找到了以下解決方案,但想你的建議:
/* stack.h */
struct stack;
extern bool stack_isempty(struct stack *s);
/* stack.c */
#include "stack.h"
struct stack { [...]; int size; };
inline bool stack_isempty(struct stack *s) { return s->size == 0; }
我通常使用內聯的其他方式或只把static inline
功能在頭文件。但正如所解釋的,這是不可能的。
這種方法是否能提供理想的結果?有沒有人看到這種方法的任何缺點(便攜式C99)?
雖然這個問題從語言的角度來看是有效的,但從實際的角度來看,'inline'對於編譯器在內部調用時是否內聯函數沒有任何影響,所以你可以通過不使用它簡化了你的代碼。 – Leushenko 2017-08-03 09:59:40