如何在构建时计算'C'中的平方根?

时间:2015-10-10 01:08:00

标签: c math build

我有构建时数组: const float my_array = {blah,blah,PROXIMITY_WIDTH_PIXELS,blah,       blah,PROXIMITY_WIDTH_PIXELS * 10.0,blah};

我得到错误“初始化程序不是常量”:

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

如何在'C'常量(构建时)数组或#define宏中的构建时计算平方根?

3 个答案:

答案 0 :(得分:0)

只使用C预处理器而不使用其他代码生成技巧,你不能。

最简单的解决方案是使用double类型的全局变量,该变量在使用前初始化。不幸的是,编译器不能被告知这是const,所以它可能会产生比你想要的更多的变量访问,这可能或不重要。

如果您使用C ++,则可以执行以下操作:

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

“代码生成技巧”是指在构建时运行脚本(甚至是为构建机器编译的C程序)时生成一个头文件,在其中插入浮点常量。

答案 1 :(得分:0)

如果PROXIMITY OBJECT SIZE宏总是采用两个或三个已知值中的一个,那么您可以根据具体情况定义PROXIMITY WIDTH PIXELS宏。

答案 2 :(得分:0)

sqrt是一个函数,因此它是&#39;结果不是恒定的。您可以使用像autoconf这样的工具(或者通过编译一个使用常量PROXIMITY_OBJECT_SIZE_PIXELS的简单类来生成您可以包含的头文件来创建自己的工具)。这是使用自举来解决鸡和蛋问题的一个例子。我建议您查看一些可能的替代方案Bootstrapping (Compilers)