c - 强制编译时计算 C
问题描述
假设我有一个文件,我在其中对一些数据进行一些计算。它可能是(非常psedo计算)像这样:
void hash_value(unsigned char* value){
unsigned char i;
for(i + 0; i < 10; i++){
value[i] ^= (0x1b+i)
}
}
void break_value(unsigned char* value){
unsigned char i;
for(i = 0; i < 10; i++)
value[i] &= 0x82;
}
void affect_value(unsigned char* value){
hash_value(value);
break_value(value);
}
在我的主要我会做以下事情:
#include "smart_calculations.h"
int main() {
unsigned char value[16] = {'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S'};
affect_value(value);
// Do other stuff
}
由于我不打算更改 value 数组的内容,但我需要先进行计算,然后才能继续做其他事情。我猜一些编译器会识别并优化代码,以便在编译时计算数据。
我的问题是,我如何(尽可能)强制编译器在编译时进行这种优化,这样“Smart_calculations”文件中的方法不会在最终产品中浪费空间,并且数组的初始值不是t 编译到程序中?
解决方案
最简单、最通用的方法是手动进行暂存。也就是说,在构建阶段运行显式执行预计算的代码,并且只将结果编译到程序中。
如果你想在 C 中完成这一切,你会创建一个smart_calculations.c
带有函数的main
函数。你首先编译一个smart_calculations
可执行文件,它产生
unsigned char value[16] = { ... };
作为输出。将此输出放在一个文件中,例如smart_generated.h
.
然后,您的真实程序将使用#include
以下文件:
int main() {
#include "smart_generated.h" // 'value' is now a local variable
// Do other stuff
}
...或者(如果您想要一个全局变量)您将生成的结果放在一个.c
文件中并将其链接到您的程序中。
当然,使用这种方法,您不仅限于在 C 中进行“智能计算”。您可以使用在构建时可用的任何编程语言或环境。
推荐阅读
- javascript - js - 我是否也需要为缩小文件创建地图文件?
- python - Django 继承项目
- user-interface - AutoHotKey,运行时,GUI 中的按钮将起作用
- java - 如何用 JTextField 信息替换选中的 JCheckbox
- eclipse - 是否有在 Eclipse 比较视图中的窗格之间切换的快捷方式?
- jms - 通过 Bridge 将消息单元顺序属性从源 ActiveMQ 保留到 Weblogic 队列
- sabre - 响应中缺少 SABER 酒店预订请求 TravelItineraryRead
- python - 使用opencv python检测不完整的圆
- julia - 在 Julia 中使用 GeoStats 包进行克里金插值
- django - Nginx 渲染速度太慢