Ниже приведен краткий пример того, как вы можете использовать параметры для передачи массивов между функциями, чтения данных и проверки их.
Обратите внимание, что для чтения данных и проверки данных не нужно иметь никакого представления оданные за исключением типа и размера.Я передал размер, но C плохо обрабатывает разные типы.Для этого вам нужно создать разные функции, использовать общий тип #define
или сделать что-нибудь вонючее void *
и набрать тип перечисления.(В C ++ есть шаблоны для решения этой проблемы ...)
Также обратите внимание, что на самом деле здесь нет менеджера состояний или чего-то еще, только пара функций.Если вы хотите построить настоящий менеджер состояний, тогда данные действительно захотят стать частью этого менеджера.Это опять-таки может перейти в землю C ++, хотя C может делать такие вещи прилично.
#include <stdio.h>
typedef int BOOL;
#define TRUE 1
#define FALSE 0
// Pass the data by reference and include the number of entries.
// This way we can modify the data. In C, you almost always pass
// arrays this way as passing arrays by value isn't well supported.
void readData(int *myData, int numEntries)
{
for(int i=0; i<numEntries; i++)
{
myData[i] = i;
}
}
// validate the data - *myData here could/should be constant.
BOOL validateData(int *myData, int numEntries)
{
for(int i=0; i<numEntries; i++)
{
if(myData[i] != i)
{
return FALSE;
}
}
return TRUE;
}
// Using C style defines for constants. Newer compilers can do it safer.
#define NUM_ENTRIES 10
int main()
{
int myData[NUM_ENTRIES];
readData(myData, NUM_ENTRIES);
if(!validateData(myData, NUM_ENTRIES))
{
printf("Bad Data\n");
}
else
{
printf("Good Data\n");
}
return 0;
}
Я рассмотрел возможность показа версии глобального массива, но я против, потому что это продвигает действительно плохие привычки кодирования и не требуетсядля этого случая.