Есть (в той же cinepaint-0.19) вот такой код:
858: size_t size = 0; 859: char* buf; 860: LPGAMMATABLE gamma = cmsBuildGamma(256, 1.0), g; 861: if (info->photomet == PHOTOMETRIC_MINISWHITE) 862: g = cmsReverseGamma(256, gamma); 863: else 864: g = gamma; 865: cmsHPROFILE lp = cmsCreateGrayProfile(cmsD50_xyY(), g);
При компиляции возникает ошибка:
tiff.c: In function `load_image': tiff.c:865: parse error before `lp'
Если закомментировать или вырезать строчки с 860 по 864, то компилируется нормально. Если потом перед объявлением lp вписать еще что-нибудь, например, объявление int aaaa=101; то тоже нормально.
Но вот стоит добавить 'if' и на такой код снова ругается на parse error before 'lp':
char* buf; LPGAMMATABLE gamma = cmsBuildGamma(256, 1.0), g; /*if (info->photomet == PHOTOMETRIC_MINISWHITE) g = cmsReverseGamma(256, gamma); else g = gamma;*/ int aaaa=101; if (aaaa==101) aaaa=102; cmsHPROFILE lp = cmsCreateGrayProfile(cmsD50_xyY(), g);
Помогите понять, что происходит: такое впечатление что компилятор в этом месте не переваривает инструкции условного перехода или я сильно чего-то не знаю в Си. Компилировать с отключенной оптимизацией пробовал - не помогает.