我目前的代碼是:
int my_func(int a)
{
#ifdef _WIN32
return _func(a);
#else
return func(a);
#endif
}
但我認為如果它是這樣的會更好:
#ifdef _WIN32
#define common_func(a) _func(a);
#else
#define common_func(a) func(a);
#endif
int my_func(int a)
{
return common_func(a);
}
現在,我從來沒有這樣做過,我不知道我在做什么。K&R cat() 示例令人困惑。我基本上只是想將#ifdefs 從函式中取出,因為它會變得太亂,因為我必須多次運行該函式。
func()并且_func()是相同的功能,只是 Windows 認為在它前面加上下劃線是個好主意。所以它甚至不是一個宏函式,而更像是一個函式別名。還是包裝?
這會影響性能嗎?生成的代碼是否與版本 1 不同?有什么技巧嗎,因為區別只是下劃線?
我想正確和正確地做到這一點。請幫忙。
uj5u.com熱心網友回復:
Windows 認為在它前面加上下劃線是個好主意。所以它甚至不是一個宏函式,而更像是一個函式別名。還是包裝?
很可能它只是一個具有相同規格的不同名稱的函式。可能不是包裝器或別名。與對應的 、和不同, C 語言規范沒有定義諸如 POSIX open()、read()和之類的函式。一般來說,C 實作必須提供后一組,因為它們沒有義務提供前一組。write()fopen()fread()fwrite()
這會影響性能嗎?
條件編譯指令,例如#ifdef在編譯時評估。它們本身根本沒有運行時影響,而且它們在編譯時非常便宜。
生成的代碼是否與版本 1 不同?
不,您的代碼的兩個版本是 100% 等效的。
有什么技巧嗎,因為區別只是下劃線?
如果您想使用幾個函式,其中 Windows 版本的名稱與(我想)POSIX 版本的名稱不同,但前導下劃線,那么您可能認為值得花時間定義一個可以重用于所有函式的通用宏,而不是為每個單獨的功能滾動一個單獨的東西。也許是這樣的:
#ifdef _WIN32
#define POSIX_MANGLE(f) _ ## f
#else
#define POSIX_MANGLE(f) f
#endif
你會使用這樣的東西:
void do_something(int a) {
POSIX_MANGLE(func1)(a);
POSIX_MANGLE(func2)(a);
}
在 Windows 上(從技術上講,無論在哪里_WIN32定義),這相當于...
void do_something(int a) {
_func1(a);
_func2(a);
}
在其他任何地方,它都相當于...
void do_something(int a) {
func1(a);
func2(a);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/520267.html
標籤:C
下一篇:大小為0的qsort未定義?
