gpt4 book ai didi

c - 宏的动态定义

转载 作者:行者123 更新时间:2023-11-30 16:48:07 25 4
gpt4 key购买 nike

我需要动态定义函数和宏,对于动态函数,以下代码工作正常,但当我尝试在第一个代码中添加宏时,它会失败。有没有办法获得所需的行为

#define INIT_PATH_FUNCTION(UCI_PATH, DPATH) \
struct ctx *ctx_##_PATH; \
int print##_PATH(char *package) \
{\
print("package %s \n", package); \
return 0; \
}\
#define foreach_file_##PATH(path) \
for (section = print##_PATH(path); \
section != NULL; \
section = print##_PATH(path))\

#define PRINT(UCI_PATH, path) print##_PATH(path)


INIT_PATH_FUNCTION(test, "/etc/")
INIT_PATH_FUNCTION(test2, "/root/")

最佳答案

I need to define function and macro dynamically

那恐怕你注定会不满意。您可以编写一个宏,其替换文本包含宏调用,但不能通过扩展宏来生成宏定义。最终,它归结为 paragraph 6.10/2该标准的部分内容是

A preprocessing directive consists of a sequence of preprocessing tokens that satisfies the following constraints: The first token in the sequence is a # preprocessing token that (at the start of translation phase 4) is either the first character in the source file (optionally after white space containing no new-line characters) or that follows white space containing at least one new-line character.

(强调已添加。)

虽然您可以提供具有宏定义形式的宏替换文本,但替换文本不满足在翻译阶段 4 开始时作为任何类型的预处理指令的要求(其中执行预处理指令) 。宏的扩展产生这种形式的文本是无关紧要的,因为它来得太晚了。

<小时/>

然而,函数定义(和声明)是另一回事。如果您愿意,您当然可以通过宏生成这些内容,如果您需要多个不同的函数和大量样板代码,那么这是一个合理的做法。

关于c - 宏的动态定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43100336/

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