有什么其它的方法代替?

tangshuiling 2008-08-26 09:50:54
问题是这样的:

#define TOKEN(x) a##x
于是可以这么使用
TOKEN(1);表示a1 //这里的1可用变量代替吗?使之可变
比如:
int val=1;
TOKEN(val); //直接用肯定是不行,表示为aval了;

只是求证一下!本人是没有想出什么法子来。
...全文
149 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
npuhuxl 2008-08-29
  • 打赏
  • 举报
回复
受教!
npuhuxl 2008-08-27
  • 打赏
  • 举报
回复
不行,宏展开是在编译期完成的。
#define TOKEN(x) a##x
只代表字符串的链接,不包含解析x的实际内容,除非x本身也是一个宏。
如:#define val 1
#define TOKEN(x) a##x

TOKEN(val)
weiyijiji 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 npuhuxl 的回复:]
不行,宏展开是在编译期完成的。
#define TOKEN(x) a##x
只代表字符串的链接,不包含解析x的实际内容,除非x本身也是一个宏。
如:#define val 1
#define TOKEN(x) a##x

TOKEN(val)
[/Quote]
纠正下,在有##或者#时宏展开后不会再次用另外宏代替,所以这里你得到的是aval
AlwaysSLH 2008-08-27
  • 打赏
  • 举报
回复
学习~~~
weiyijiji 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 nwpulei 的回复:]
引用 3 楼 weiyijiji 的回复:
sprintf可用

曾听说sprintf 很厉害的。
请您具体说说要怎么弄。
[/Quote]
#include <stdio.h>
int main(){
char c[5]={'0'};
int val=0;
sprintf(c,"a%d",val);
printf("%s\n",c);
return 0;
}
visame 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 tangshuiling 的帖子:]
问题是这样的:C/C++ code#defineTOKEN(x) a##x于是可以这么使用
TOKEN(1);表示a1//这里的1可用变量代替吗?使之可变比如:intval=1;
TOKEN(val);//直接用肯定是不行,表示为aval了;
只是求证一下!本人是没有想出什么法子来。
[/Quote]
这些宏都是预处理命令
那时候,根本不知道val到底是色盲
只知道傻傻地替换
nwpulei 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 weiyijiji 的回复:]
sprintf可用
[/Quote]
曾听说sprintf 很厉害的。
请您具体说说要怎么弄。
weiyijiji 2008-08-26
  • 打赏
  • 举报
回复
sprintf可用
nwpulei 2008-08-26
  • 打赏
  • 举报
回复
不行.宏是在编译时进行处理的。
可以说编译之后的代码你看不到宏的任何痕迹。
当然“//这里的1可用变量代替吗?使之可变”
也就不可以了。

开心爸爸84 2008-08-26
  • 打赏
  • 举报
回复
用函数实现吧,这样恐怕是不行
Date 对象属性constructor 返回对创建此对象的 Date 函数的引用。prototype 使您有能力向对象添加属性和方法。Date 对象方法getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。getFullYear() 从 Date 对象以四位数字返回年份。getHours() 返回 Date 对象的小时 (0 ~ 23)。getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。getMonth() 从 Date 对象返回月份 (0 ~ 11)。getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。getTime() 返回 1970 年 1 月 1 日至今的毫秒数。getTimezoneOffset() 返回本地时间与格林威治标准时间 (GMT) 的分钟差。getUTCDate() 根据世界时从 Date 对象返回月中的一天 (1 ~ 31)。getUTCDay() 根据世界时从 Date 对象返回周中的一天 (0 ~ 6)。getUTCFullYear() 根据世界时从 Date 对象返回四位数的年份。getUTCHours() 根据世界时返回 Date 对象的小时 (0 ~ 23)。getUTCMilliseconds() 根据世界时返回 Date 对象的毫秒(0 ~ 999)。getUTCMinutes() 根据世界时返回 Date 对象的分钟 (0 ~ 59)。getUTCMonth() 根据世界时从 Date 对象返回月份 (0 ~ 11)。getUTCSeconds() 根据世界时返回 Date 对象的秒钟 (0 ~ 59)。getYear() 已废弃。 请使用 getFullYear() 方法代替。parse() 返回1970年1月1日午夜到指定日期(字符串)的毫秒数。setDate() 设置 Date 对象中月的某一天 (1 ~ 31)。setFullYear() 设置 Date 对象中的年份(四位数字)。setHours() 设置 Date 对象中的小时 (0 ~ 23)。setMilliseconds() 设置 Date 对象中的毫秒 (0 ~ 999)。setMinutes() 设置 Date 对象中的分钟 (0 ~ 59)。setMonth() 设置 Date 对象中月份 (0 ~ 11)。setSeconds() 设置 Date 对象中的秒钟 (0 ~ 59)。setTime() setTime() 方法以毫秒设置 Date 对象。setUTCDate() 根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。setUTCFullYear() 根据世界时设置 Date 对象中的年份(四位数字)。setUTCHours() 根据世界时设置 Date 对象中的小时 (0 ~ 23)。setUTCMilliseconds() 根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。setUTCMinutes() 根据世界时设置 Date 对象中的分钟 (0 ~ 59)。setUTCMonth() 根据世界时设置 Date 对象中的月份 (0 ~ 11)。setUTCSeconds() setUTCSeconds() 方法用于根据世界时 (UTC) 设置指定时间的秒字段。setYear() 已废弃。请使用 setFullYear() 方法代替。toDateString() 把 Date 对象的日期部分转换为字符串。toGMTString() 已废弃。请使用 toUTCString() 方法代替。toISOString() 使用 ISO 标准返回字符串的日期格式。toJSON() 以 JSON 数据格式返回日期字符串。toLocaleDateString() 根据本地时间格式,把 Date 对象的日期部分转换为字符串。toLocaleTimeString() 根据本地时间格式,把 Date 对象的时间部分转换为字符串。toLocaleString() 据本地时间格式,把 Date 对象转换为字符串。toString() 把 Date 对象转换为字符串。toTimeString() 把 Date 对象的时间部分转换为字符串。toUTCString() 根据世界时,把 Date 对象转换为字符串。UTC() 根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数。valueOf() 返回 Date 对象的原始值。

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧