从其他文件访问C Struct成员(主要)

时间:2019-02-21 14:40:23

标签: c

检查了几个堆栈溢出问题/答案,但都与我要执行的操作不符。就是这样:

我有一个ac对象文件ggplot() + geom_histogram(aes(x = LD1, y = stat(density)), bins = 20, data = iris.scaled) + facet_grid(Species ~ .) ,其中包含在运行时填充的结构类型(由具有ApplicationInsights.config功能的主文件初始化。下面是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函数。

1 个答案:

答案 0 :(得分:3)

您可以通过以下操作避免公开您的私人数据:

  1. main处理指向不完整类型struct prv_data_t的指针

  2. 为您允许main访问的成员实施getter函数(和setter函数)

类似这样的东西:

a.h

#include <stdio.h>

struct prv_data_t;  // Incomplete type

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

交流

#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对于该结构的成员一无所知。