gpt4 book ai didi

c - 强制编译时计算 C

转载 作者:太空狗 更新时间:2023-10-29 17:24:47 27 4
gpt4 key购买 nike

假设我有一个文件,我在其中对一些数据进行了一些计算。它可能是这样的(非常伪的计算):

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

}

因为我不打算更改值数组的内容,但我需要先进行计算才能继续做其他事情。我猜某些编译器会识别并优化代码,以便在编译时计算数据。

我的问题是,我如何(尽可能最好地)强制编译器在编译时进行这种优化,这样“Smart_calculations”文件中的方法就不会在最终产品中浪费空间,并且数组没有编译到程序中?

最佳答案

最简单、最通用的方法是手动进行暂存。也就是说,运行在构建阶段显式执行预计算的代码,并且仅将结果编译到您的程序中。

如果您想在 C 中全部完成,您需要创建一个带有 main 函数的 smart_calculations.c。您首先要编译一个生成

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 语言进行“智能计算”。您可以使用构建时可用的任何编程语言或环境。

关于c - 强制编译时计算 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52454722/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com