Передача указателя перечисления в параметрах в C программировании - PullRequest
0 голосов
/ 04 июля 2018

У меня проблемы с передачей указателя enum в параметры функции.

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

//Prototypes
void automate(int tddv_estime, int tab_para_automate[][3], enum* Etat);
void fct_test(int scenario[]);


/*-----------------------------------------------------------------------
main()
-------------------------------------------------------------------------*/
int main()
{ 
int scenario[15] = {21, 21, 20, 12, 12, 20, 22, 22, 22, 22, 22, 22, 22, 22, 500};

fct_test(scenario);
return 0;
}

/*-----------------------------------------------------------------------
Fonction fct_test
-------------------------------------------------------------------------*/
void fct_test(int scenario[])
{
    //PARAMETRES
    int increment = 1;
    int tddv_estime;


int para_1_min = 5;
int para_1_max = 10;

int para_2_min = 1;
int para_2_max = 4;

int tab_para_automate[2][3] = {{0}};
int tab_para_application[2][2] = {{0}};

int i,j,k;

enum Etat {INIT, DECREMENT_PARA_1, INCREMENT_PARA_1, ETAT_INVARIANT_1, DECREMENT_PARA_2, ETAT_INVARIANT_2, INCREMENT_PARA_2, RADAR_SATURE};

/*printf("ETAT INITIAL\n");
printf("Para_1_courant = %d\n" , para_1_courant);
printf("Para_2_courant = %d\n\n\n" , para_2_courant);*/

for (k=0 ; k<16 ;k++)
{
    tab_para_automate[k][0] = para_1_min;
    tab_para_automate[k][1] = para_1_max;
}


for (j=1 ; j<16 ;j++)
{
    tab_para_automate[j][0] = para_2_min;
    tab_para_automate[j][1] = para_2_max;
}


    do {
    for (i=0 ; i<16 ; i++)
   {
        tddv_estime = scenario[i];
        automate(tddv_estime, tab_para_automate, &Etat);
   }
        }while (scenario[i] != 500);
}

/*-----------------------------------------------------------------------
Fonction automate
-------------------------------------------------------------------------*/

void automate(int tddv_estime, int tab_para_automate[][3], enum* Etat)
{
int evenement;

int tddv_worst = 20;
int para_1_min = tab_para_automate[0][0];
int para_1_max = tab_para_automate[0][1];

int para_2_min = tab_para_automate[1][0];
int para_2_max = tab_para_automate[1][1];

int para_2_courant = para_2_max;
int para_1_courant = para_2_max;

if (tddv_estime < tddv_worst)
    evenement = 1; //Etat initial

if (tddv_estime > tddv_worst)
    evenement = 2; //Decrement para1

if (tddv_estime < tddv_worst && tab_para_automate[0][0] < tab_para_automate[0][1])
    evenement = 3; //Increment para1

if (tddv_estime == tddv_worst)
    evenement = 4; //Etat Invariant 1

if (tddv_estime > tddv_worst && tab_para_automate[0][0] <= tab_para_automate[0][0])
    evenement = 5; //Decrement para_2

if (tddv_estime < tddv_worst && para_2_courant < tab_para_automate[1][1])
    evenement = 6; //Increment para2

if (tddv_estime == tddv_worst)
    evenement = 7; //Etat Invariant 2

if (tddv_estime > tddv_worst && tab_para_automate[0][0] <= para_1_min && para_2_courant <= para_2_min)
    evenement = 8; //Etat radar sature


}

Я не могу передать свой указатель enum в параметрах, я не знаю почему. Я давно искал решение, может кто-нибудь помочь мне в этом, пожалуйста? Возможно, проблема в прототипах, возможно, я не очень хорошо объявляю свою переменную enum, я не могу найти решение.

1 Ответ

0 голосов
/ 04 июля 2018

Вы должны объявить тип enum Etat перед первым использованием (т.е. сразу после ваших включений):

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

enum Etat {INIT, DECREMENT_PARA_1, INCREMENT_PARA_1, ETAT_INVARIANT_1, DECREMENT_PARA_2, ETAT_INVARIANT_2, INCREMENT_PARA_2, RADAR_SATURE};

и исправьте прототип и определение для использования нового типа (помните: тип равен enum Etat)

//Prototypes
void automate(int tddv_estime, int tab_para_automate[][3], enum Etat *etat);
void fct_test(int scenario[]);

Затем вам нужно создать экземпляр объекта enum перед вызовом automate:

enum Etat etat;
automate(tddv_estime, tab_para_automate, &etat);

Так вы правильно используете перечисления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...