#define set_s (x,y) {strcpy(s[x].name,y);s[x].size=strlen(y);} 报错

winmenaruto 2011-04-12 11:50:05
#include<stdio.h>
#include<string.h>
#define set_s (x,y) {strcpy(s[x].name,y);s[x].size=strlen(y);}
#define nmemb 3
struct test
{
char name[20];
int size;
}s[nmemb];

void main()
{

FILE * stream;
set_s(0,"Linux!");
set_s(1,"FreeBSD!");
set_s(2,"Windows2000.");
stream=fopen("c:\\a.txt","w");
fwrite(s,sizeof(struct test),nmemb,stream);
fclose(stream);

}

\f.cpp(15) : error C2065: 'x' : undeclared identifier
'y' : undeclared identifier
\f.cpp(15) : error C2143: syntax error : missing ';' before '{'
\f.cpp(16) : error C2143: syntax error : missing ';' before '{'
\f.cpp(17) : error C2143: syntax error : missing ';' before '{'

说set_s(0,"Linux!");的xy没有定义,怎么整,谢谢~~
...全文
115 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
luciferisnotsatan 2011-04-12
  • 打赏
  • 举报
回复
这种代码,为什么不用函数呢?
無_1024 2011-04-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 pengzhixi 的回复:]
#define set_s(x,y) {strcpy(s[x].name,y);s[x].size=strlen(y);}
[/Quote]
不要空格
赵4老师 2011-04-12
  • 打赏
  • 举报
回复
编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。
pengzhixi 2011-04-12
  • 打赏
  • 举报
回复
#define set_s(x,y) {strcpy(s[x].name,y);s[x].size=strlen(y);}
rainID 2011-04-12
  • 打赏
  • 举报
回复
#define set_s(x,y) {strcpy(s[x].name,y);s[x].size=strlen(y);}

set_s(x,y)中间不要有空格
hujiey 2011-04-12
  • 打赏
  • 举报
回复
set_s(0,"Linux!");
set_s(1,"FreeBSD!");
set_s(2,"Windows2000.");
后面的封号去掉 你在宏定义里已经是完整的语句
damon-pku 2011-04-12
  • 打赏
  • 举报
回复
#define set_s((x),(y)) {strcpy(s[x].name,(y));s[x].size=strlen(y);}
xiangpengmeng 2011-04-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xiangpengmeng 的回复:]

#define set_s(x,y) do \
{ \
strcpy(s[(x)].name, (y)); \
s[(x)].size = strlen(y); \
} \
while(0)
试试这一个可以吗?应该没有问题

你可一直接使用set_s(1,"linux");
后面也可以加分号,就像普通函数一样
[/Quote]

已经测试过了,没有问题
xiangpengmeng 2011-04-12
  • 打赏
  • 举报
回复
#define set_s(x,y) do \
{ \
strcpy(s[(x)].name, (y)); \
s[(x)].size = strlen(y); \
} \
while(0)
试试这一个可以吗?应该没有问题

你可一直接使用set_s(1,"linux");
后面也可以加分号,就像普通函数一样
blackstar8888 2011-04-12
  • 打赏
  • 举报
回复
把你的3楼的代码Copy到你编译器上比对一下就知道有没有空格了
winmenaruto 2011-04-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hnuqinhuan 的回复:]
引用 3 楼 pengzhixi 的回复:
#define set_s(x,y) {strcpy(s[x].name,y);s[x].size=strlen(y);}

不要空格
[/Quote]
没有空格啊,我里边没打空格

64,649

社区成员

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

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