在C编程的参数中传递枚举指针

时间:2018-07-04 13:37:38

标签: c pointers

将枚举指针传递给函数参数时遇到一些问题。

#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


}

我无法在参数中传递枚举指针,我也不知道为什么。我一直在寻找解决方案已有一段时间了,有人可以帮我吗? 也许问题出在原型中,也许我没有很好地声明我的枚举变量,找不到解决方案。

1 个答案:

答案 0 :(得分:1)

您必须在首次使用之前(即在包含内容之后)声明类型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};

并修复原型和定义以使用新类型(请记住: type enum Etat

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

然后,您必须在调用automate之前实例化一个枚举对象:

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

这是正确使用枚举的方式。