簡體   English   中英

如何在構建時計算“ C”中的平方根?

[英]how can I calculate square root in 'C' at build-time?

我有構建時數組:const float my_array = {等等,等等,PROXIMITY_WIDTH_PIXELS,等等,等等,PROXIMITY_WIDTH_PIXELS * 10.0,等等};

我收到以下錯誤消息:“初始化程序不是常量”:

#define    PROXIMITY_OBJECT_SIZE_PIXELS    <a constant value>
#define   PROXIMITY_WIDTH_PIXELS( sqrt( PROXIMITY_OBJECT_SIZE_PIXELS ))

如何在“ C”常量(構建時)數組或#define宏中的構建時計算平方根?

僅使用C預處理程序而沒有其他代碼生成技巧,則不能。

最簡單的解決方案是使用double類型的全局變量,該變量在使用前已初始化。 不幸的是,不能告訴編譯器這是const ,因此它可能會生成比您希望的更多的變量訪問,這可能會或可能不會重要。

如果使用C ++,則可以執行以下操作:

// function calls allowed in file scope initializers!
const double proximity_width_pixels = sqrt(PROXIMITY_OBJECT_SIZE_PIXELS);

“代碼生成技巧”指的是在構建時運行腳本(甚至為構建計算機編譯的C程序)時執行的操作,該操作會生成頭文件,並在頭文件中插入浮點常量。

如果PROXIMITY OBJECT SIZE宏始終采用兩個或三個已知值之一,那么您可以根據具體情況定義PROXIMITY WIDTH PIXELS宏。

sqrt是一個函數,因此其結果不是恆定的。 您可以使用諸如autoconf之類的工具(或通過編譯一個使用常量PROXIMITY_OBJECT_SIZE_PIXELS生成可以包含的標頭的簡單類來制作自己的工具)。 這是使用引導程序解決雞肉和雞蛋問題的示例。 我建議您查看自舉(編譯器)以了解其他可能的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM