奇怪的编程方法?---请问这种代码的源文件怎么执行?

kevindong333 2009-05-21 04:52:11
像这种源代码,怎么去调用?

源代码实现的功能是 从代码所在的目录下的读入自定义的一种图片格式的文件,然后转换成sun raster file 格式输出,这个文件的文件名是 ihdr2sum
请问像这种源代码,怎么去调用,怎么去执行----我连 bulid都找不到?

还请问这种main与其自带大括号中间还放上其参数变量算什么c语言的什么性质---在圣经《c程序设计语言》用什么关键字可以找到,我想看一下。



main(argc,argv)
int argc;
char *argv[];
{
int width,height,depth,filesize,maplength;
struct rasterfile rasterhdr;
char *filename, *mapfile, *outfile, sunfile[BUFSIZE];
unsigned char *data, *map;
IHEAD *ihead;
FILE *fp;

procargs(argc,argv,&filename,&mapfile,&outfile);

ReadIheadRaster(filename,&ihead,&data,&width,&height,&depth);
if((depth != 1) && (depth != 8)){
(void) fprintf(stderr,"Pixel depth of %d is not currently supported.\n",
depth);
exit(-1);
}

rasterhdr.ras_magic = RAS_MAGIC;
rasterhdr.ras_width = width;
rasterhdr.ras_height = height;
rasterhdr.ras_depth = depth;
filesize = SizeFromDepth(width,height,depth);
rasterhdr.ras_length = filesize;
rasterhdr.ras_type = RT_STANDARD;

if (depth == 8) {
if (mapfile == (char *) NULL)
mapfile = DEFAULTMAP;
ReadSunColormap(mapfile, &map, &maplength);
rasterhdr.ras_maplength = maplength;
rasterhdr.ras_maptype = RMT_EQUAL_RGB;
} else {
maplength = 0;
rasterhdr.ras_maplength = maplength;
rasterhdr.ras_maptype = RMT_NONE;
}

if (outfile == (char *) NULL) {
(void) strcpy(sunfile, filename);
fileroot(sunfile);
(void) strcat(sunfile, SUNEXT);
} else
(void) strcpy(sunfile, outfile);

if ((fp = fopen(sunfile,"w")) == (FILE *) NULL) {
(void) fprintf(stderr,"Unable to open file %s\n",sunfile);
exit(-1);
}

(void) fwrite((char *)&rasterhdr,1,sizeof(struct rasterfile),fp);

if (maplength != 0) {
(void) fwrite((char *)map, 1, maplength, fp);
free((char *) map);
}
...全文
125 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kevindong333 2009-05-21
  • 打赏
  • 举报
回复
快啊,想结贴了
kevindong333 2009-05-21
  • 打赏
  • 举报
回复
明白了,请再问老师一个问题
再用VS 编译器时,是不是必须主动建立一个工程,然后才能build,然后运行啊?
因为这个源代码是我从网上download下来的,但是直接打开发现build的那个按钮都没了,不知道怎么运行他了

谢谢
[Quote=引用 5 楼 lingyin55 的回复:]
旧的c标准就是把变量放在函数定义的小括号与大括号之间。
现在的编译器一般不支持了

引用 3 楼 kevindong333 的回复:
这个是函数定义,所以定义也可以这样--也就是把形式参数声明列表发在函数定义的小括号与大括号之间,是吗?
引用 2 楼 goodname 的回复:
http://support.microsoft.com/kb/79845/zh-cn

7.0 和更高版本所在的 Microsoft C/C++ 编译器版本不支持 C++ 文件中的旧样式函数声明。 旧样式声明仍然受支持…
[/Quote]
lingyin55 2009-05-21
  • 打赏
  • 举报
回复
旧的c标准就是把变量放在函数定义的小括号与大括号之间。
现在的编译器一般不支持了

[Quote=引用 3 楼 kevindong333 的回复:]
这个是函数定义,所以定义也可以这样--也就是把形式参数声明列表发在函数定义的小括号与大括号之间,是吗?
引用 2 楼 goodname 的回复:
http://support.microsoft.com/kb/79845/zh-cn

7.0 和更高版本所在的 Microsoft C/C++ 编译器版本不支持 C++ 文件中的旧样式函数声明。 旧样式声明仍然受支持 C 文件中。

有时称为 K&R 的声明的旧样式声明都有中的声明是在括号内列出的任何参数。 例如:

void KRfunc(); /* d…
[/Quote]
goodname 2009-05-21
  • 打赏
  • 举报
回复
我认为是这样的。
我记得似乎在谭的c语言书中提到过,我们上学用的那本教材。
现在新版的不知道还有没有。
kevindong333 2009-05-21
  • 打赏
  • 举报
回复
这个是函数定义,所以定义也可以这样--也就是把形式参数声明列表发在函数定义的小括号与大括号之间,是吗?
[Quote=引用 2 楼 goodname 的回复:]
http://support.microsoft.com/kb/79845/zh-cn

7.0 和更高版本所在的 Microsoft C/C++ 编译器版本不支持 C++ 文件中的旧样式函数声明。 旧样式声明仍然受支持 C 文件中。

有时称为 K&R 的声明的旧样式声明都有中的声明是在括号内列出的任何参数。 例如:

void KRfunc(); /* declaration */
void KRfunc(a, b) /* definition */
int a;
char b;
{ }


C++ 需要 ANSI 样式函数原型 (或声明),哪个列表…
[/Quote]
goodname 2009-05-21
  • 打赏
  • 举报
回复
http://support.microsoft.com/kb/79845/zh-cn

7.0 和更高版本所在的 Microsoft C/C++ 编译器版本不支持 C++ 文件中的旧样式函数声明。 旧样式声明仍然受支持 C 文件中。

有时称为 K&R 的声明的旧样式声明都有中的声明是在括号内列出的任何参数。 例如:

void KRfunc(); /* declaration */
void KRfunc(a, b) /* definition */
int a;
char b;
{ }


C++ 需要 ANSI 样式函数原型 (或声明),哪个列表每个参数的类型由该函数接受,如下所示:

void ANSIfunc(int a, char b);


需要此类型的声明,,因为在 C++ 中每个函数有一个签名。 签名由该函数和接受该参数的类型的名称组成。 编译器无法构造从 K&R 声明的函数的签名。
goodname 2009-05-21
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20080827/18/29608fc0-db9a-4a5d-b8c0-c4118f97b27e.html

69,378

社区成员

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

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