2017-06-20 23 views
0

寫一些代碼,我想出一個數據緩衝,這將有利於通過提供的緩衝區的最大大小頭:避免宏單獨的聲明從執行

#define MAXIMUM_BUFFER_SIZE (SIZE_MAX - 1) 

但是最大的缺點我看到在這裏(除了預處理器的混亂)是最大尺寸實際上是實現特定的,並且可能會改變。如果其他代碼依賴於舊標題,但是新實現或其他方式,則可能會中斷。因此,我想通過在頭文件中聲明一個函數

size_t maximumBufferSize(); 

並在相應的實現文件中提供一個實現。我不關心運行時,特別是因爲值仍然是一個常量,只需要計算一次,如果需要的話可以存儲在其他代碼文件的其他位置。

所以我的實際問題是:對於這兩種方法,我是否還有其他的優缺點,我必須考慮?還有第三種方法可以達到相同的效果,也許更好?

+1

什麼是'SIZE_MAX'?你在哪裏定義它? – RoiHatam

+0

@RoiHatam'SIZE_MAX'是最大的值,可以存儲在'size_t'中。它在「stdint.h」中定義。 – Shakatir

+0

你如何期待**'SIZE_MAX' **無需重新編譯即可更改:D –

回答

1

第一種方法是走。任何依賴於實現的方式都會被新的實現所破壞,寫得不好,在決定是否使用最好的方法時不應該被視爲「con」。

只有在編譯時不知道大小的情況下,才應該使用第二個參數。

0

如果你擔心取決於平臺或正在使用產品。SIZE_MAX變化,你總是可以做這樣的事情:

#ifdef RASPBERRY_PI 
#define SIZE_MAX 1024 
#endif 

#ifdef MY_WINDOWS_PC 
#define SIZE_MAX 2048 
#endif 

#define MAXIMUM_BUFFER_SIZE (SIZE_MAX - 1)