如何组合预定义的C值以生成字符串.
#define APP_NUMBER 22
#define ICON_FILE "../icons/"##APP_NUMBER##".ico"
所以在我的.rc文件中我可以执行以下操作
1000 ICON ICON_FILE
代替
1000 ICON“../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文件,这解释了“可以” t打开图标文件“你收到的消息.
看起来您正在尝试使用令牌粘贴来生成字符串文字.问题在于,包含不匹配的“字符的部分字符串文字不能是有效的预处理标记.例如,您不能将单个”作为参数传递给宏.
考虑编写一个程序(脚本,无论如何),为您生成适当的#define指令.