[linux,C] что бы это значило или че я не так делаю?

Barbie29


#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <magick/api.h>

int main(int argc,char **argv) {
ExceptionInfo
exception;
Image
*image;
Image
image1, *img=&image1;
ImageInfo
*image_info;
PixelPacket
*pixels;
ViewInfo
*vinfo;
int size,i,j,w,h,**r,**g,**b,**y;
InitializeMagick(*argv);
GetExceptionInfo(&exception);
image_info=CloneImageInfoImageInfo *) NULL);
(void)strcpy(image_info->filename,argv[1]);
image=ReadImage(image_info,&exception);
if (image == (Image *) NULL) {
fprintf(stderr, "readFileMagick: %s: %s\n", exception.reason,exception.description);
return -1;
}
vinfo = OpenCacheView(image);
pixels = GetCacheView(vinfo, 0,0,image->columns,image->rows);
if(!pixels) {
fprintf(stderr, "readFileMagick: ошибка чтения кеша пикселей.\n");
return -1;
}
h = image->columns;
w = image->rows;
size=w*h;
unsigned short pix[size];

r = malloc(w * sizeof(*r;
for (i=0; i<w; ++i){
r[i] = malloc ( h * sizeof(**r;
}
g = malloc(w * sizeof(*g;
for (i=0; i<w; ++i){
g[i] = malloc ( h * sizeof(**g;
}
b = malloc(w * sizeof(*b;
for (i=0; i<w; ++i){
b[i] = malloc ( h * sizeof(**b;
}
y = malloc(w * sizeof(*y;
for (i=0; i<w; ++i){
y[i] = malloc ( h * sizeof(**y;
}
for (i = 0; i <= w-1; i++) {
for (j = 0; j <= h-1; j++) {
r[i][j]=(int)255*pixels[j+h*i].red/65535;
g[i][j]=(int)255*pixels[j+h*i].green/65535;
b[i][j]=(int)255*pixels[j+h*i].blue/65535;
y[i][j]=(int0.3*r[i][j]+0.59*g[i][j]+0.11*b[i][j]);
// pix[i+w*j]=(unsigned short)y[i][j];
printf ("%d ",y[i][j]);
}
printf("\n");
}

img=ConstituteImage(w,h,"I",ShortPixel,&pix,&exception);
(void) strcpy(image1.filename, argv[2]);
(void) strcpy(img->filename, argv[2]);
img->depth=16;
img->compression=1;
WriteImage(&image_info,img);
DestroyImage(img);
CloseCacheView(vinfo);
DestroyImageInfo(image_info);
DestroyExceptionInfo(&exception);
DestroyImage(image);
return 0;
}

оно затыкается на строче unsigned short pix[size]; таким образом
[code]
[mobile100 work]# gcc -O2 -march=i386 -mcpu=i386 -Wall xx.c -L/usr/lib -L/usr/lib -L/usr/X11R6/lib -L/usr/X11R6/lib -L/usr/X11R6/lib -lMagick -ltiff -lfreetype -ljpeg -lpng -lbz2 -lxml2 -lz -lpthread -lm
xx.c: In function `main':
xx.c parse error before `unsigned'
xx.c `pix' undeclared (first use in this function)
xx.c (Each undeclared identifier is reported only once
xx.c for each function it appears in.)
xx.c warning: passing arg 1 of `WriteImage' from incompatible pointer type
[mobile100 work]#
[/code]

Viktori68

Если gcc старый то декларации переменных должны быть в начале функции

Barbie29

Если gcc старый то декларации переменных должны быть в начале функции
[mobile100 work]# gcc -v
Reading specs from /usr/lib/gcc-lib/i386-asplinux-linux/2.96/specs
gcc version 2.96 20000731 (ASPLinux 7.1 2.96-79)
[mobile100 work]#

черт подери =(

lipa

а может выделять динамически надо?

Ilya1974

Ну и под рутом работать тоже не стоит.

Trofimovyoa

+1, или размер массива константой сделать нужно, или выделять динамически

evgen5555

Нельзя объявлять переменные после вызова инструкций, если это реально Си.

vall

--std=c99 и можна =)
только конечно не в gcc version 2.96 о глюках которого ходят легенды =)
реально такого релиза нет, это RH там что-то такого направила что решила выпустить свой релиз.

yolki

говорят, именно этот срез gcc пошёл в секретную ОС МО РФ "МСВС"

Ober

А мне вот голоса говорят, что немного не этот
Оставить комментарий
Имя или ник:
Комментарий: