gpt4 book ai didi

在没有 strcat 的情况下连接 #define 中的字符串

转载 作者:行者123 更新时间:2023-12-01 13:53:43 25 4
gpt4 key购买 nike

在我正在从事的项目中,我有一个与此类似的代码:

#include<stdio.h>

struct parameter_struct{
char *parameter_name;
int parameter_value;
};

int main(){
struct parameter_struct param1= {"x_custom_param1", 6};
printf("parameter name: %s\n", param1.parameter_name);
return 0;
}

我现在需要实现的是使用预定义的宏使参数名称动态化:

#define macro_custom "x_custom1_"  

因此参数名称应该是与“param1”子字符串连接的宏值。我的意思是它将是“x_custom1_param1”而不是实际的静态值“x_custom_param1”。

在我的项目中,所有参数都是这样静态声明的:

{"x_custom_param1", 6};

而且我不能触及这种代码结构。因此,我无法在 c 函数中动态初始化这些参数,并在此函数中使用 strcat。

所以我想到的是使用另一个#define with ##语句。所以我的代码将是这样的:

#include<stdio.h>

#define macro_custom "x_custom1_"
#define f(g,h) g##h


struct parameter_struct{
char *parameter_name;
int parameter_value;
};

int main(){
struct parameter_struct param1= {f(macro_custom, "param1"), 6};
printf("parameter name : %s\n", param1.parameter_name);
return 0;
}

但是我得到一个编译错误:

error: pasting "macro_custom" and ""param1"" does not give a valid preprocessing token
struct parameter_struct param1= {f(macro_custom, "param1"), 6};

这似乎合乎逻辑,因为我定义的宏不会返回带## 的字符串

有人知道我该如何纠正我的想法吗?或者有更好的主意吗?

最佳答案

您正在寻找的功能是字符串粘贴。相邻的字符串常量将由编译器合并——您不需要运算符。

#define f(g, h) (g h)

请记住,此技巧仅适用于字符串常量。它不适用于变量。

关于在没有 strcat 的情况下连接 #define 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50934003/

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