Tag: 预编译

如何让GCC在编译时评估函数?

我正在考虑以下问题:我想用一个使用某种查找表的程序编程一个微控制器(比如一个AVR mega类型)。 第一次尝试是将表定位在一个单独的文件中,并使用任何其他脚本语言/程序/创建它。在这种情况下,为C创建必要的源文件需要付出相当大的努力。 我现在的想法是使用预处理器和编译器来处理事情。 我尝试用一​​个正弦值表来实现它(仅作为示例): #include #include #define S1(i,n) ((uint8_t) sin(M_PI*(i)/n*255)) #define S4(i,n) S1(i,n), S1(i+1,n), S1(i+2,n), S1(i+3,n) uint8_t lut[] = {S4(0,4)}; void main() { uint8_t val, i; for(i=0; i<4; i++) { val = lut[i]; } } 如果我编译这段代码,我会得到有关sin函数的警告。 在程序集中,在.data部分中没有任何内容。 如果我只是删除第三行中的sin ,我得到程序集中的数据。 显然,所有信息都可以在编译时获得。 你能否告诉我是否有办法实现我的目的:编译器计算尽可能多的离线值? 或者是使用外部脚本/程序/ …来计算表条目并将它们添加到一个单独的文件中的最佳方式,该文件只是#include d?

如何让gcc为所有符号名称添加前缀

我知道在过去有一个选项-fprefix-function-name可以为所有生成的符号添加前缀,它似乎不再是gcc的一部分。 有没有其他方法可以做到这一点?