При работе с struct
в C, так как вы не объектно-ориентированные функции, это хорошо, чтобы инкапсулировать поведение или операции на таких struct
внутри методов.
С вашего STRING
типа содержит указатель, который я думаю должен принадлежать, например, то вы могли бы предоставить 3 методы для управления распределения, decallocation и сравнение STRING
объектов, например:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
typedef struct {
char* val;
} STRING;
STRING string_alloc(const char* val) {
STRING string;
string.val = malloc(strlen(val)+1);
strcpy(string.val, val);
return string;
}
void string_free(STRING* string) {
free(string->val);
}
bool string_compare(const STRING* str1, const STRING* str2) {
return strcmp(str1->val, str2->val) == 0;
}
int main(void) {
STRING string = string_alloc("foo");
STRING string2 = string_alloc("foo");
printf("Are equal: %s\n", string_compare(&string, &string2) ? "true" : "false");
string_free(&string);
string_free(&string2);
return 0;
}
Таким образом, вы можете инкапсулировать поведение сравнения внутри метода и изменить его, если вам нужно изменить структуру struct
(например, добавление полей, удаление полей), не касаясь чего-либо еще кода.
'strcmp (compare-> val," a string ") == 0' – BLUEPIXY
@Barmar' overload' + 'C' не вычисляет. – chux