2016-04-06 13 views
0

У меня есть раздел кода, который иногда дает правильные результаты. Единственное отличие заключается в том, что я сохраняю результат в промежуточной переменной.Сохранение результата в переменной дает странные результаты

Общая функция подписи:

FS_FATEntry getFATEntryForCluster(FS_Cluster cluster, FS_Instance * fsi)

Это работает:

switch (fsi->type) { 
    case FS_FAT12: 
     if (cluster % 2) 
      return ((*((uint16_t *)&FATSector[entOffset])) >> 4); 
     else 
      return ((*((uint16_t *)&FATSector[entOffset])) & 0x0FFF); 
    case FS_FAT16: 
     return (*((uint16_t *)&FATSector[entOffset])); 
    case FS_FAT32: 
     return ((*((uint32_t *)&FATSector[entOffset])) & 0x0FFFFFFF); 
} 

Это не: (обратите внимание, что FS_FATEntry является typedef'd как uint32_t)

FS_FATEntry entry = 0xFFFFFFFF; 
switch (fsi->type) { 
    case FS_FAT12: 
     if (cluster % 2) 
      entry = ((*((uint16_t *)&FATSector[entOffset])) >> 4); 
     else 
      entry = ((*((uint16_t *)&FATSector[entOffset])) & 0x0FFF); 
    case FS_FAT16: 
     entry = (*((uint16_t *)&FATSector[entOffset])); 
    case FS_FAT32: 
     entry = ((*((uint32_t *)&FATSector[entOffset])) & 0x0FFFFFFF); 
} 
free(FATSector); 
printf("Cluster %04X : %04X Entry\n", cluster, entry); 
return entry; 

При работе второй части кода, это надрез на выходе я получаю:

Cluster 00F9 : FB0FA0 Entry 
Cluster 00FA : D0FC0FB Entry 
Cluster 00FB : FD0FC0 Entry 
Cluster 00FC : F0FE0FD Entry 
Cluster 00FD : FF0FE0 Entry 
Cluster 00FE : 11000FF Entry 
Cluster 00FF : 1011000 Entry 
Cluster 0100 : 3102101 Entry 
Cluster 0101 : 1031021 Entry 
Cluster 0102 : 5104103 Entry 
Cluster 0103 : 1051041 Entry 
Cluster 0104 : 7FFF105 Entry 
Cluster 0105 : 107FFF1 Entry 
Cluster 0106 : FFFF107 Entry 
Cluster 0107 : FFFFFF1 Entry 
Cluster 0108 : B10AFFF Entry 
Cluster 0109 : 10B10AF Entry 
Cluster 010A : D10C10B Entry 
Cluster 010B : 10D10C1 Entry 
Cluster 010C : F10E10D Entry 
Cluster 010D : FFF10E1 Entry 
Cluster 010E : 1110FFF Entry 
Cluster 010F : 111110F Entry 
+3

«это отрезок выхода». Вам нужно сделать больше, чем просто сбросить выходные данные. Вы должны объяснить, что именно о выходе вы хотите, чтобы мы заметили. Я предполагаю, что это неправильно. Поэтому, пожалуйста, сообщите нам, каков фактический результат. И вы действительно должны предоставить [минимальную полную и проверяемую] (https://stackoverflow.com/help/mcve) версию вашего кода. – kaylum

+0

@kaylum Я добавлю ожидаемый результат. MWE будет чрезвычайно сложно, так как для этого требуется много файлов и образ диска FAT12. –

+0

Наверное, нет необходимости. Похоже, у вас уже есть отличный ответ. Но обратите внимание на улучшение будущих вопросов. – kaylum

ответ

3

Исходный код возвращается из каждого случая, новый код проваливается ... вы намерены провалиться на коммутаторе, т.е. не использовать перерыв?

+0

Не думаю! Хороший улов - я дам это зайти –

+0

Вот и все! Невозможно увидеть лес для деревьев иногда ... –

+0

Проваливаясь на коммутаторе, я делал это больше раз, чем я помню. – Harry

 Смежные вопросы

  • Нет связанных вопросов^_^