У меня есть структура, которую я хочу передать некоторому внешнему c-коду через некоторую функцию обратного вызова, которую они регистрируют в моей программе. Однако я хочу передать эту структуру как доступную только для чтения. Меня беспокоит то, что они все еще могут изменять структуры, которые у меня есть указатель внутри исходной структуры, которую я передаю. Разъяснение с небольшим примером ниже:
struct s1 {
int a;
int b;
};
struct s2 {
int x;
struct s1 *y;
};
void f(const struct s2 *o)
{
//o->x=10; //error
o->y->a=20; //no error
o->y->b=30; //no error
}
int main()
{
struct s1 o1 = {10, 20};
struct s2 o2 = {30, &o1};
f(&o2);
}
Итак, как мне улучшить дизайн кода, чтобы они ничего не могли изменить по структуре, которую я передал?