gpt4 book ai didi

c - 在程序开始时随机化#define

转载 作者:太空宇宙 更新时间:2023-11-04 01:16:40 25 4
gpt4 key购买 nike

我有一个在用户和后端之间严格分离的应用程序。用户与我的后端交互的唯一方式是通过一个函数。要指定用户想要什么,此函数的第一个参数是用户希望后端执行的指令(例如 getData)。这看起来像这样

后端调用(getData,arg1,arg2,arg3,arg4)

我的后端提供的服务名称保存在一个 .h 文件中(称为 definitions.h)。此文件仅包含#defines。

#define getData 1
#define setData 2
...

这样用户更容易进行后端调用。出于安全原因,我想在开始时随机化 #defines 的值。

我知道可以像这样在定义中调用函数#define var foo()

我的问题是这对我不起作用,因为我不能使用函数来定义随机值。即使我像这样添加一个整数

int asdfqweryxcv = 20;

我在编译时收到一条错误消息,指出该值有多个定义。我可以将名称更改为我想要的任何名称,结果始终相同。

错误信息如下所示:

../../lib.a(userfile1.c.o):/home/../../../definitions.h:8: multiple definition of `asdfqweryxcv'
CMakeFiles/mult.c.o:/home/../../../definitions.h:8: first defined here

../../lib.a(userfile2.c.o):/home/../../../definitions.h:8: multiple definition of `asdfqweryxcv'
CMakeFiles/mult.c.o:/home/../../../definitions.h:8: first defined here

...

我想随机化这些定义,并为每个定义分配一个唯一的编号。

最佳答案

Randomize a #define at program start

不可能。预处理器宏在预处理时扩展,这发生在编译之前,编译发生在程序开始之前。

您需要的是一个变量。当然,您可以定义一个宏来扩展到变量名,但这比直接使用变量的优势不大。

I get an error message on compilation that this value has multiple definitions.

更准确地说,错误信息是在编译之后的链接上。

您必须在 header 中声明变量 extern。然后在一个翻译单元中,定义变量(没有 extern)。小心不要在初始化之前尝试使用该值,否则您将得到零而不是随机值。

关于c - 在程序开始时随机化#define,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56632050/

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