의도 자체는 충분히 이해가 간다.
sht85_t* sht85_read(double temp, double humi) { // 생략
이렇게 코딩해 보면
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
double read_adc_temp_ch(void) { return (11.1); }
double read_adc_humi_ch(void) { return (22.2); }
typedef struct _sht85_t {
double temp;
double humi;
} sht85_t;
void sht85_init(sht85_t* sht85) {
sht85->temp = 0.0;
sht85->humi = 0.0;
}
sht85_t sht85_read(double temp, double humi) {
sht85_t sht85 = {0.0, 0.0};
sht85.temp = temp;
sht85.humi = humi;
return sht85;
}
sht85_t* sht85_read_ref(double temp, double humi) {
sht85_t sht85 = { 0.0, 0.0 };
sht85.temp = temp;
sht85.humi = humi;
return &sht85; // ★★★
}
int main(void) {
sht85_t sht85;
sht85_init(&sht85);
double temp = read_adc_temp_ch();
double humi = read_adc_humi_ch();
sht85= sht85_read(temp, humi);
printf("(temp,humi)=(%4.1f,%4.1f)\\r\\n", sht85.temp, sht85.humi);
sht85_t* sht85_2;
sht85_2= sht85_read_ref(temp, humi);
printf("(temp,humi)=(%4.1f,%4.1f)\\r\\n", sht85_2->temp, sht85_2->humi);
return 0;
}
비주얼 스튜디오가 경고를 준다.
경고가 안나오는데요?
// ★★★ 부분 빼고는 위와 거의 동일하다.
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
double read_adc_temp_ch(void) { return (11.1); }
double read_adc_humi_ch(void) { return (22.2); }
typedef struct _sht85_t {
double temp;
double humi;
} sht85_t;
void sht85_init(sht85_t* sht85) {
sht85->temp = 0.0;
sht85->humi = 0.0;
}
sht85_t sht85_read(double temp, double humi) {
sht85_t sht85 = {0.0, 0.0};
sht85.temp = temp;
sht85.humi = humi;
return sht85;
}
sht85_t* sht85_read_ref(double temp, double humi) {
sht85_t* sht85 = (sht85_t*)malloc(sizeof(sht85_t)); // ★★★ (1)
if (sht85 == NULL) { return NULL; }
sht85->temp = temp;
sht85->humi = humi;
return sht85;
}
int main(void) {
sht85_t sht85;
sht85_init(&sht85);
double temp = read_adc_temp_ch();
double humi = read_adc_humi_ch();
sht85= sht85_read(temp, humi);
printf("(temp,humi)=(%4.1f,%4.1f)\\r\\n", sht85.temp, sht85.humi);
sht85_t* sht85_2;
sht85_2= sht85_read_ref(temp, humi); // ★★★
printf("(temp,humi)=(%4.1f,%4.1f)\\r\\n", sht85_2->temp, sht85_2->humi);
return 0;
}
그런데 이렇게 하게 되면.. 할일이 한두가지 늘어나는게 아니다.