检查了几个堆栈溢出问题/答案,但都与我要执行的操作不符。就是这样:
我有一个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
函数。
答案 0 :(得分:3)
您可以通过以下操作避免公开您的私人数据:
让main
处理指向不完整类型struct prv_data_t
的指针
为您允许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
对于该结构的成员一无所知。