✅ 이렇게 하고 싶을수도 있지.

의도 자체는 충분히 이해가 간다.

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;
}

비주얼 스튜디오가 경고를 준다.

image.png

경고가 안나오는데요?

경고를 최대로, 경고를 무시하기

✅ 굳이이이이이 하고 싶다면, 이렇게 할수도 있다.

// ★★★ 부분 빼고는 위와 거의 동일하다.

#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;
}

그런데 이렇게 하게 되면.. 할일이 한두가지 늘어나는게 아니다.