请教一个C语言结构体问题:编译出现很多错误,但是把文件名改成.cpp就能编译通过了,这是什么问题啊?

error C2146: syntax error : missing ')' before identifier 'pp'
error C2061: syntax error : identifier 'pp'
error C2059: syntax error : ';'
程序前面的部分如下:
#include "stdio.h"
#include "string.h"
#define format "|%-10s |%8d| \n"
#define data p->name,p->jbgz

struct rsda
{
char name[10];
int jbgz;
}tp[]={"liming",2500,"wanggang",3000,"zhanghan",2800,"liuyang",3200,"dufeng",4300};

void printdata(rsda pp)
{
rsda *p;
p=&pp;
printf(format,data);
}
就是显示在printfdata()函数的定义处有以上的错误。但是我把文件名从.c改成.cpp之后,就可以编译通过了,对了,我是在VC上编译的,这个本来就是典型的C程序,为什么以.c命名不行,而以.cpp命名却可以?.c与.cpp有什么区别啊?请指点,谢谢!

问题不是出在struct的定义上,c中楼主对struct的定义用法是正确的一种形式,问题是出在你对struct变量的引用上不能只是用rdsa,而是必须用struct rdsa,这是c语言对结构体变量的声明的规定,这也是c与c++在结构变量的声明上的区别,建议楼主对c与c++在教材中分别加以考证~代码需改动为:
void printdata(struct rsda pp)//改动过!
{
struct rsda *p;//改动过!
p=&pp;
printf(format,data);
}
嗯,但是使用typedef时就是定义新的变量类型了,这样就不是在结构体上的问题,这样的话c与c++在其上没有差异。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-10
楼上说的不全对。

C语言里边,使用struct来定义结构体,要有struct这个关键字编译器才认得是个结构体。
所以代码修改如下就能运行了。
#include "stdio.h"
#include "string.h"
#define format "|%-10s |%8d| \n"
#define data p->name,p->jbgz

struct rsda
{
char name[10];
int jbgz;
}tp[]={"liming",2500,"wanggang",3000,"zhanghan",2800,"liuyang",3200,"dufeng",4300};

void printdata(struct rsda pp)
{
struct rsda *p;
p=&pp;
printf(format,data);
}
void main()
{
printdata(tp[0]);
}
----------------------------
typedef struct rsda
{
char name[10];
int jbgz;
}rsda;
是重新定义了一个新的类型叫rsda,所以下面也就不会报错了。
第2个回答  2011-08-10
把struct rsda
{
char name[10];
int jbgz;
}tp[]={"liming",2500,"wanggang",3000,"zhanghan",2800,"liuyang",3200,"dufeng",4300};

改成

typedef struct rsda
{
char name[10];
int jbgz;
}rsda;
rsda tp[]={"liming",2500,"wanggang",3000,"zhanghan",2800,"liuyang",3200,"dufeng",4300};

C编译器对结构体的格式要求可能比C++编译器要求严格点。
第3个回答  2011-08-10
如LS所说!!

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网