Значение общественного модификатора для функции в C - PullRequest
4 голосов
/ 16 мая 2011
PUBLIC void main

Это из kernel.c из источника Minix.Что означает PUBLIC в этом случае?

Ответы [ 4 ]

9 голосов
/ 16 мая 2011

Это, вероятно, определяется так:

#define PUBLIC extern
#define PRIVATE static

Упс, только что посмотрел в моем экземпляре Таненбаума. Он определяется как:

#define PUBLIC

т.е. как ничего. Это просто немного «самодокументирования». ЧАСТНЫЙ определяется как я изначально сказал. Вы можете найти их в исходном файле Minix const.h.

3 голосов
/ 16 мая 2011

Цитируется по Tanenbaum. Проектирование и реализация Minix Book. Третье издание. Стр. 143 параграф 3

PRIVATE определяется как синоним статического.Процедуры и данные, на которые нет ссылок вне файла, в котором они объявлены, всегда объявляются как ЧАСТНЫЕ, чтобы их имена не были видны за пределами файла, в котором они объявлены.Как правило, все переменные и процедуры должны быть объявлены с локальной областью видимости, если это возможно.PUBLIC определяется как пустая строка.Пример из kernel / proc.c может помочь прояснить это.Объявление

PUBLIC void lock_dequeue (rp)

выходит из препроцессора C как

void lock_dequeue (rp)

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

extern глобальные переменные видны / доступны извне файла.Для определений функций extern является необязательным, поскольку по умолчанию они видны из-за пределов видимости файла.

Хэш, определяющий эти вещи для PRIVATE и PUBLIC, является не чем иным, как добавлением слоя абстракции для лучшей интерпретации ипонимание того, что на самом деле предназначено.Как и в ООП-дизайне, у private и public есть интерпретации, добавление одинаковых имен указывает, какие свойства у них есть.

1 голос
/ 16 мая 2011

Я полагаю, что он будет заменен препроцессором на более похожий на C (или на пустую строку).

Попробуйте поискать #define с PUBLIC

0 голосов
/ 16 мая 2011

Слово PUBLIC подразумевает, что оно помечает метод как часть «открытого интерфейса» модуля компиляции, то есть это метод, который можно вызывать извне текущего исходного файла. (Это просто обоснованное предположение). Как уже отмечали другие, PUBLIC почти наверняка является макросом препроцессора, который расширяется до некоторого набора соответствующих ключевых слов / атрибутов.

...