一个gcc下c的错误

软件和网站开发以及相关技术探讨
回复
weitaotao110
帖子: 24
注册时间: 2008-04-09 23:46

一个gcc下c的错误

#1

帖子 weitaotao110 » 2008-12-09 14:56

这个是源码

代码: 全选

#include<stdio.h>
#include<malloc.h>
#include<unistd.h>
#include<alloca.h>

extern void afunc(void)
extern etext,edata,end;

int bss_var;     //未初始化全局变量
int data_var=42;  //初始化全局变量存储在数据区
#define SHW_ADR(ID,I) printf("the %8s\t is at adr:%8x\n",ID,&I);//打印地址区

int main(int argc,char *argv[])
{
	char *p,*b,*nb;
	printf("Adr etext:%8x\t Adr edata %8x\t Adr end %8x\t\n",&etext,&edata,&end);
	printf("\ntext Location:\n");
	SHW_ADR("main",main);
	SHW_ADR("afunc",afunc);
	printf("\nbss Location:\n");
	SHW_ADR("bss_var",bss_var);
	printf("\ndata Location:\n");
	afunc();
	p=(char* )alloca(32);
	if(p!=NULL)
	{
		SHW_ADR("start",p);
		SHW_ADR("end",p+31);
	}
	b=(char *)malloc(32*sizeof(char));
	nb=(char *)malloc(16*sizeof(char));
	printf("\nHeap Locations:\n");
	printf("the Heap start:%p\n",b);
	printf("the Heap end:%p\n",(nb+16*sizeof(char)));
	printf("\nb and nb in stack\n");
	SHWADR("b",b);
	SHWADR("nb",nb);
	free(b);
	free(nb);
}

void afunc(void)
{
	static long int level=0;    //静态数据存储在数据段
	int	stack_var;
	if(++level==5)
	{
		return;
	}
	printf("stack_var is at:%P\n",&stack_var);
	afunc();
}
这个是错误信息;
mem_add.c: 在函数‘afunc’中:
mem_add.c:7: 错误: 为形参‘etext’指定了存储类
mem_add.c:7: 错误: 为形参‘edata’指定了存储类
mem_add.c:7: 错误: 为形参‘end’指定了存储类
mem_add.c:10: 错误: 形参‘data_var’已初始化
mem_add.c:14: 错误: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
mem_add.c:43: 错误: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
mem_add.c:52: 错误: 原型函数定义中使用了旧式参数声明
mem_add.c:52: 错误: expected ‘{’ at end of input
望高手帮帮解决下,谢谢!
头像
牙签儿
帖子: 509
注册时间: 2007-06-30 0:27

Re: 一个gcc下c的错误

#2

帖子 牙签儿 » 2008-12-09 15:32

#include<stdio.h>
#include<malloc.h>
#include<unistd.h>
#include<alloca.h>

extern void afunc(void);
extern etext,edata,end;

int bss_var; //未初始化全局变量
int data_var=42; //初始化全局变量存储在数据区
#define SHW_ADR(ID,I) printf("the %8s\t is at adr:%8x\n",ID,&I);//打印地址区

int main(int argc,char *argv[])
{
char *p,*b,*nb;
printf("Adr etext:%8x\t Adr edata %8x\t Adr end %8x\t\n",&etext,&edata,&end);
printf("\ntext Location:\n");
SHW_ADR("main",main);
SHW_ADR("afunc",afunc);
printf("\nbss Location:\n");
SHW_ADR("bss_var",bss_var);
printf("\ndata Location:\n");
afunc();
p=(char* )alloca(32);
if(p!=NULL)
{
SHW_ADR("start",p);
SHW_ADR("end",p+31);
}
b=(char *)malloc(32*sizeof(char));
nb=(char *)malloc(16*sizeof(char));
printf("\nHeap Locations:\n");
printf("the Heap start:%p\n",b);
printf("the Heap end:%p\n",(nb+16*sizeof(char)));
printf("\nb and nb in stack\n");
SHW_ADR("b",b);
SHW_ADR("nb",nb);

free(b);
free(nb);
}

void afunc(void)
{
static long int level=0; //静态数据存储在数据段
int stack_var;
if(++level==5)
{
return;
}
printf("stack_var is at:%P\n",&stack_var);
afunc();
}
初学写程序一定要十分的细心。
反对台独,反对藏独,反对孤独!
apt-get不是万能的:

代码: 全选

sudo apt-get install girlfriend
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
有一些软件包无法被安装。
下列的信息可能会对解决问题有所帮助:
下列的软件包有不能满足的依赖关系:
girlfiend: 依赖: hourse但是它将不会被安装
girlfiend: 依赖: car但是它将不会被安装
house,car: 依赖: money但是它将不会被安装
E: 无法安装的软件包
头像
iceway
帖子: 33
注册时间: 2007-10-15 9:08
来自: Xiamen, China

Re: 一个gcc下c的错误

#3

帖子 iceway » 2008-12-10 18:16

这个是错误信息;
mem_add.c: 在函数‘afunc’中:
mem_add.c:7: 错误: 为形参‘etext’指定了存储类
mem_add.c:7: 错误: 为形参‘edata’指定了存储类
mem_add.c:7: 错误: 为形参‘end’指定了存储类
mem_add.c:10: 错误: 形参‘data_var’已初始化
mem_add.c:14: 错误: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
mem_add.c:43: 错误: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
mem_add.c:52: 错误: 原型函数定义中使用了旧式参数声明
mem_add.c:52: 错误: expected ‘{’ at end of input



编译提示里面已经很详细了.
一般遇到编译提示错误,先看最前边的,有可能你解决了第一个,后边很多错误都消失了.
实际上程序并没有那么多的错误,只是因为前边的某个错误而导致编译器不能够正常的
分析后边的程序才会报出那么多的错误...

你的程序提示的最前边的错误在第7行,所以应该先去这里看看,
稍微细心点就可以发现第6行少了个分号...解决之后再重新编译,再看再解决,其实很容易的...
有些故事还没讲完, 那就算了吧;有些心情在岁月中, 已经难辨真假。
bitbybit.72pines.com
weitaotao110
帖子: 24
注册时间: 2008-04-09 23:46

Re: 一个gcc下c的错误

#4

帖子 weitaotao110 » 2008-12-27 0:11

iceway 写了:这个是错误信息;
mem_add.c: 在函数‘afunc’中:
mem_add.c:7: 错误: 为形参‘etext’指定了存储类
mem_add.c:7: 错误: 为形参‘edata’指定了存储类
mem_add.c:7: 错误: 为形参‘end’指定了存储类
mem_add.c:10: 错误: 形参‘data_var’已初始化
mem_add.c:14: 错误: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
mem_add.c:43: 错误: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
mem_add.c:52: 错误: 原型函数定义中使用了旧式参数声明
mem_add.c:52: 错误: expected ‘{’ at end of input



编译提示里面已经很详细了.
一般遇到编译提示错误,先看最前边的,有可能你解决了第一个,后边很多错误都消失了.
实际上程序并没有那么多的错误,只是因为前边的某个错误而导致编译器不能够正常的
分析后边的程序才会报出那么多的错误...

你的程序提示的最前边的错误在第7行,所以应该先去这里看看,
稍微细心点就可以发现第6行少了个分号...解决之后再重新编译,再看再解决,其实很容易的...
真的很感谢你!我会更加细心的写程序的。
weitaotao110
帖子: 24
注册时间: 2008-04-09 23:46

Re: 一个gcc下c的错误

#5

帖子 weitaotao110 » 2008-12-27 0:16

牙签儿 写了:
#include<stdio.h>
#include<malloc.h>
#include<unistd.h>
#include<alloca.h>

extern void afunc(void);
extern etext,edata,end;

int bss_var; //未初始化全局变量
int data_var=42; //初始化全局变量存储在数据区
#define SHW_ADR(ID,I) printf("the %8s\t is at adr:%8x\n",ID,&I);//打印地址区

int main(int argc,char *argv[])
{
char *p,*b,*nb;
printf("Adr etext:%8x\t Adr edata %8x\t Adr end %8x\t\n",&etext,&edata,&end);
printf("\ntext Location:\n");
SHW_ADR("main",main);
SHW_ADR("afunc",afunc);
printf("\nbss Location:\n");
SHW_ADR("bss_var",bss_var);
printf("\ndata Location:\n");
afunc();
p=(char* )alloca(32);
if(p!=NULL)
{
SHW_ADR("start",p);
SHW_ADR("end",p+31);
}
b=(char *)malloc(32*sizeof(char));
nb=(char *)malloc(16*sizeof(char));
printf("\nHeap Locations:\n");
printf("the Heap start:%p\n",b);
printf("the Heap end:%p\n",(nb+16*sizeof(char)));
printf("\nb and nb in stack\n");
SHW_ADR("b",b);
SHW_ADR("nb",nb);

free(b);
free(nb);
}

void afunc(void)
{
static long int level=0; //静态数据存储在数据段
int stack_var;
if(++level==5)
{
return;
}
printf("stack_var is at:%P\n",&stack_var);
afunc();
}
初学写程序一定要十分的细心。
谢谢,~~~~~~~~~~~~~~~
回复