c/c++语言能实现则个功能么?

duqiang2050 2003-05-27 03:19:22
输入的一个字符窜
如果等于“abcd”程序里就定义个叫“abcd”的变量,等于别的就定义一个别的变量
...全文
31 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoyunet 2003-05-27
  • 打赏
  • 举报
回复
再to:mouseleeky(守夜人),我修改一下你的程序,在后面再增加一个int _name = 45;的定义,瞧,出现编译错误了吧。

#include<iostream>

using namespace std;

#define LINK(ch) _##ch

void main()
{
char name[5];
cout<<"Please input the name of the variable:"<<endl;
for(int i=0;i<5;i++)
cin>>name[i];
int LINK(name)=5;

int _name = 45; //error, redefinition!
cout<<LINK(name)<<endl;
}
xiaoyunet 2003-05-27
  • 打赏
  • 举报
回复
to:mouseleeky(守夜人),你的程序生成的变量名是_name,可不是什么_abcd,##是在编译时期连接名字的,没有办法解决运行时的需求。

还有这段话:
其实由于输入的原因,运行期是被打断的。
在输入结束后,程序有可能根据输入内容动态地产生变量名。
而在程序中建立debug函数却不能有什么作用,这是因为运行期不会因为已经写好的硬代码有什么变化。多态可以认为是在运行时把对象的本象还给原来的对象。也并没有打断运行期。

看不懂,什么叫运行期时被打断的?
love_snoopy 2003-05-27
  • 打赏
  • 举报
回复
不知道摸板能不能实现这个目标
cenphoenix 2003-05-27
  • 打赏
  • 举报
回复
学习
Schlemiel 2003-05-27
  • 打赏
  • 举报
回复
用一个map,用你输入的字符串作为key,新建一个变量作为value,再把包装函数写写好就差不多行了。
mouseleeky 2003-05-27
  • 打赏
  • 举报
回复
其实由于输入的原因,运行期是被打断的。
在输入结束后,程序有可能根据输入内容动态地产生变量名。
而在程序中建立debug函数却不能有什么作用,这是因为运行期不会因为已经写好的硬代码有什么变化。多态可以认为是在运行时把对象的本象还给原来的对象。也并没有打断运行期。
idontlikenickname 2003-05-27
  • 打赏
  • 举报
回复
Mmm...
楼主的这个要求好像很特别啊?不过这个功能无论是在编译期(CompileTime)还是在运行期(RunTime)都是实现不了的.
假设能够实现那我们可以在程序中建立一个debug函数,再其中输入我们想要知道的任意一个变量的名字,然后打印出这个变量的值.那还要那么多debug工具干吗???!!!
mouseleeky 2003-05-27
  • 打赏
  • 举报
回复
不要一上来就说别人的方法行不通,我的程序中没有加任何一句注释说明我是在打印变量的名字,你怎么就想当然的这么认为了呢?
再有,我认为只要你是在贴出程序,那么就一定要是调试过的,否则是对别人的不负责任。我看到这个问题后,觉得自己在哪里遇到过类似的问题,我是非常认真的在vc6.0上调过才贴出来的。
mouseleeky 2003-05-27
  • 打赏
  • 举报
回复
我打印的显然不是变量名字,而是他的值,5。
另外,这个程序是刚刚在VC6.0下调试过的。
不信的人可以去调试。
xiaoyunet 2003-05-27
  • 打赏
  • 举报
回复
mouseleeky(守夜人) ,你的方法行不通,呵呵。没听说过cout能把变量的名字打出来的。
liu_feng_fly 2003-05-27
  • 打赏
  • 举报
回复
to 楼上,不要乱说,你的程序你自己测试过?
这是msdn上的例子,替换是发生在编译时期
#define paster( n ) printf( "token" #n " = %d", token##n )
int token9 = 9;

If a macro is called with a numeric argument like

paster( 9 );

the macro yields

printf( "token" "9" " = %d", token9 );

which becomes

printf( "token9 = %d", token9 );

lwbhero 2003-05-27
  • 打赏
  • 举报
回复
用c++编译器实现的让c++语言来实现有点越俎代庖之嫌
mouseleeky 2003-05-27
  • 打赏
  • 举报
回复
你可以试试这个程序
你可以输入一个字符串(不超过5个字母,当然这个数由你决定)。
比如你输入的是abcd
那么程序生成一个名字叫做_abcd的int变量。
#include<iostream.h>

#define LINK(ch) _##ch

void main()
{
char name[5];
cout<<"Please input the name of the variable:"<<endl;
for(int i=0;i<5;i++)
cin>>name[i];
int LINK(name)=5;
cout<<LINK(name)<<endl;
}
ybsoft 2003-05-27
  • 打赏
  • 举报
回复
楼主疯了
atto 2003-05-27
  • 打赏
  • 举报
回复
有趣,
虽然是个很菜的问题,
也不可否认很有创意呦:)
meimj 2003-05-27
  • 打赏
  • 举报
回复
好有创意的想法,楼主想干什么??
xingaolan 2003-05-27
  • 打赏
  • 举报
回复
up
reinhard_liu 2003-05-27
  • 打赏
  • 举报
回复
变量叫什么有关系吗?
ouyangdong 2003-05-27
  • 打赏
  • 举报
回复
好好努力,改写编译器,就能了。:)
pzytony 2003-05-27
  • 打赏
  • 举报
回复
这是两个不同的概念
变量名在程序中仅仅是个标识,其实表示变量的物理地址(在赋值后),
而字符串是确定的值,存在内存中。
两者不可混淆和混用!
谢谢
加载更多回复(3)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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