gpt4 book ai didi

c 预处理器字符串连接

转载 作者:太空狗 更新时间:2023-10-29 15:39:03 25 4
gpt4 key购买 nike

如何组合预定义的 C 值来生成字符串。

#define APP_NUMBER 22
#define ICON_FILE "../icons/"##APP_NUMBER##".ico"

以便在我的 .rc 文件中我可以执行以下操作

 1000 ICON  ICON_FILE

代替 1000 个图标“../icons/22.ico”

it didnt work

  #define MY_ICON_FILE 25
#define STR(x) #x
#define ICON_FILE_NUM(x) "../icons/" STR(x) ".ico"
1000 ICON ICON_FILE_NUM(MY_ICON_FILE)

编译错误

  can't open icon file `../icons/': Permission denied

nothing was appended to "../icons/"

我刚刚得到的最接近的是这样做:

  #define MY_ICON_FILE 25
#define STR(x) #x
#define ICON_FILE_NUM(x) "../icons/"STR(x)".ico" /// took out spaces
1000 ICON ICON_FILE_NUM(MY_ICON_FILE)

(去掉 STR(x) 周围的空格)

得到这个编译器错误

 can't open icon file `../icons/"25".ico': Invalid argument

最佳答案

这个有效:

#define APP_NUMBER 22
#define STR(x) #x
#define ICON_FILE_NAME(num) "../icons/" STR(num) ".ico"
#define ICON_FILE ICON_FILE_NAME(APP_NUMBER)

#include <stdio.h>
int main(void) {
printf("ICON_FILE = \"%s\"\n", ICON_FILE);
return 0;
}

输出是:

ICON_FILE = "../icons/22.ico"

但是 ICON_FILE 宏扩展为 "../icons/""22"".ico",这是 C 的有效语法(相邻的字符串文字被连接起来),但可能不适用于 .rc 文件,它解释了您收到的“无法打开图标文件”消息。

看起来您正在尝试使用 token 粘贴来生成字符串文字。问题在于,包含不匹配的 " 字符的 partial 字符串文字不能成为有效的预处理标记。例如,您不能传递单个 " 作为宏的参数。

考虑编写一个程序(脚本,无论什么),为您生成适当的 #define 指令。

关于c 预处理器字符串连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13506266/

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