Доступ к члену C Struct из другого файла (основного) - PullRequest
0 голосов
/ 21 февраля 2019

Проверено несколько вопросов / ответов о переполнении стека, но ни один из них не соответствует тому, что я пытаюсь сделать.Вот оно:

У меня есть объектный файл ac myobject.c, содержащий тип структуры, заполненный во время выполнения (как инициализируется основным файлом с функцией main(). Ниже приведена скелетная структура myobject.c:

typedef struct
{
    uint16_t    ID;
    float       tempo;
    char        unit[10];
    unsigned long timestamp;
} prv_data_t;

static uint8_t prv_value(lwm2m_data_t* dataP,
                           prv_data_t* tempData)
{
    uint8_t ret = COAP_205_CONTENT;  
    //TO DO here
  .
  .
  .
   return ret;
}

static uint8_t prv_read(..paramList)
{
    //TO DO here
    .
    .

  //then call prv_value here
        result = prv_value((*tlvArrayP)+i, tempData);

    return result;
}
object_t * get_object(){
//this func get called by main.c to initialize myobject
}

Скелетная структура файла main.c:

myFunc(mypar p) {

}

main(){

  //initialize myobject
  //.....

  //access myobject struct member here, pass to myFunc call
  myFunc(tempo)
}

main.c инициализирует myobject.c. Теперь я хочу получить доступ к tempo члену prv_data_t из myobject.c для некоторых вычислений. Как мне выполнить такую ​​задачу, не выставляя prv_data_t в main.c?

РЕДАКТИРОВАТЬ: вот что я имею в виду под main.c инициализирует myobject.c ивсе другие объекты, пожалуйста:

 /*
     * Now the main function fill an array with each object,
     * Those functions are located in their respective object file.
     */
    objArray[0] = get_security_object();
    if (NULL == objArray[0])
    {
        fprintf(stderr, "Failed to create security object\r\n");
        return -1;
    }
.
.
.

Основной файл фактически содержит функцию main().

1 Ответ

0 голосов
/ 21 февраля 2019

Вы можете избежать раскрытия ваших личных данных, выполнив:

  1. Пусть main работает с указателями на неполный тип struct prv_data_t

  2. Реализуйте функции getter (и функции setter) для членов, которым вы разрешаете main доступ к

Примерно так:

ah

#include <stdio.h>

struct prv_data_t;  // Incomplete type

struct prv_data_t * get_obj();
float get_tempo(struct prv_data_t * this);

ac

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

struct prv_data_t
{
    int         ID;
    float       tempo;
    char        unit[10];
    unsigned long timestamp;
};

float get_tempo(struct prv_data_t * this)
{
  return this->tempo;
}

struct prv_data_t * get_obj()
{
  struct prv_data_t * p = malloc(sizeof *p);

  p->tempo = 42.0;

  return p;
}

main.c

#include <stdio.h>
#include "a.h"

int main()
{
  struct prv_data_t * p = get_obj();

  printf("%f\n", get_tempo(p));

  // The line below can't compile because the type is incomplete
  // printf("%f\n", p->tempo);

  return 0;
}

То есть с таким кодом main знает только, что существует struct prv_data_t, но main ничего не знает о членах этой структуры.

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