Ich habe deine letzten Sätze nicht verstanden.
Dein abkopierter Code auch laienhaft, globale Variablen, Verzicht auf sizeof und verständnislose C99 Verwendung ohne Initial-Definition der Laufvariable i.
Deine Variante, das Problem in eine eigene Funktion zu kapseln ist richtig, die Umsetzung ist aber schlecht ( was ist feld, [][] dürfte uncompilierbar sein, EXIT_SUCCESS gehört nur in den main-Kontext, ... ).
Besser du übergibst der Funktion einen Zeiger auf den Beginn deines Speichers und die Anzahl der (int)Elemente, also in etwa
uint32_t checksum(const int *array,int n) {
uint32_t crc32 = 0;
for (int i = 0; i < n; ++i)
if (((crc32 & 0x80000000) ? 1 : 0) != array[i])
crc32 = (crc32 << 1) ^ CRC32POLY;
else
crc32 <<= 1;
//printf("0x%08X\n", crc32);
return crc32;
}
Eine evtl. Compilerwarnung, wenn du ein int array[X][Y] an die Funktion übergibst, kannst du ignorieren.