加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c预处理器字符串连接

发布时间:2020-12-16 07:33:39 所属栏目:百科 来源:网络整理
导读:如何组合预定义的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
如何组合预定义的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指令.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读