Что такое «защита переменной» в C? Как это работает? - PullRequest
3 голосов
/ 03 июня 2010

В C ++ у нас есть абстракция и сокрытие данных. Можем ли мы достичь этого через C?

Ответы [ 5 ]

6 голосов
/ 03 июня 2010

Определите вашу структуру в файле .C, и только «объявите вперед» структуру в вашем заголовке.

Итак, ваш файл .C может содержать:

struct Car
   {
   char *brand;
   int   maxspeed;
   };

И ваш файл .H может содержать это:

typedef struct Car *CarHandle;

Затем напишите функции для управления машиной (сеттеры, геттеры, ...) и поместите их в тот же файл .C, где определена структура. Конечно, прототипы функций должны быть помещены в заголовок.

Теперь вызывающие абоненты могут использовать CarHandle и функции, которые работают с CarHandle, но никогда не видят, что находится внутри структуры Car.

2 голосов
/ 03 июня 2010

Вы можете использовать неполные и производные типы, аналогично концепции «непрозрачных данных» в C ++. Это довольно хорошо написанная статья на эту тему.

0 голосов
/ 03 июня 2010

Статья High и Low-C C содержит много полезных советов. В частности, обратите внимание на раздел « Абстрактные типы данных ».

См. Также: Какие существуют методы для модульного кода C?

0 голосов
/ 03 июня 2010

Как упоминал Питер Миле, вы можете создавать переменные и функции, которые являются частными для модуля (часто такие же, как для файла, я полагаю, в зависимости от компилятора).

Вы можете сравнить модули с классами. static переменные доступны только из модуля. Вы также можете иметь эквивалент частных функций, объявив функции как static внутри модуля.

Разница между этим и реальными классами заключается в том, что у вас может быть только один экземпляр. Но с небольшим количеством работы вы также можете имитировать реализацию нескольких экземпляров.

0 голосов
/ 03 июня 2010

Вы можете сделать это со статическими (глобальными) переменными и внешними функциями для управления ими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...