реверсю одну прогу, в ней много массивов, каждый инициализируется своими данными нужно проверять чтобы количество инициализаторов совпадало с размерностью, иначе долго искать баги прийдётся как такое организовать средствами компилятора gcc-4.4? пробовал: int array[20]={0,1,34,...,67}; //вот здесь на один больше-меньше всё съедает компилер -Wall молчит -pedantic молчит что ему надо?
Неправда. Меньше - можно, больше - нет. Ничего ему не надо. По стандарту инициализаторов может быть меньше, остальные нулями заполняются.
спасибо, только что проверил - так и есть могу поделиться наброском преобразования всех чисел в файле из формата ffffffffh в формат 0x0ffffffff очень экономит время для множества данных Код (Text): #include <stdio.h> #include <stdlib.h> char arrayin[0xffffff]; char arrayout[0xffffff]; int main() { FILE *fin=fopen("in","rb"); FILE *fout=fopen("out","wb"); int i=0,j=0,k=0,l=8,n=0,c; while((arrayin[i++]=getc(fin))!=EOF); for(;j<i;j++) { if((arrayin[j]==' ')||(arrayin[j]=='0')||(arrayin[j]=='1')||(arrayin[j]=='2')||(arrayin[j]=='3')||(arrayin[j]=='4')||(arrayin[j]=='5')||(arrayin[j]=='6')||(arrayin[j]=='7')||(arrayin[j]=='8')||(arrayin[j]=='9')||(arrayin[j]=='A')||(arrayin[j]=='B')||(arrayin[j]=='C')||(arrayin[j]=='D')||(arrayin[j]=='E')||(arrayin[j]=='F')||(arrayin[j]=='h')||(arrayin[j]==',')) { if (arrayin[j]=='h') { k=0; while((arrayin[j-k]!=' ')&&(arrayin[j-k]!=',')) { arrayout[l-k+3]=arrayin[j-k]; k++; } arrayout[l-k+1]='0'; arrayout[l-k+2]='x'; arrayout[l+3-k]='0'; l+=k+3; arrayout[l]=','; } } } for(n=0;n<l;n++) { if (arrayout[n]=='h') arrayout[n]=','; if (arrayout[n]==0) arrayout[n]='\n'; putc(arrayout[n],fout); } fclose(fin); fclose(fout); return 0; } допиливать много, но в предальфа-версии покатит
на самом деле fscanf поможет нам только, читать построчно или массивом нет разницы обрабатывать всё равно нужно тонко у меня один раз получилась нормальная версия, не такая кривая как эта, эта скорее набросок идеи, но нормальная версия была успешно потёрта, а для конкретной задачи в первом приближении хватит и этой, задача стояла не перебивать все 'h' на 0x0.