2015-07-23 2 views
1

Я должен вернуть nul в функции, но мне не разрешено включать какую-либо библиотеку. Я попытался найти, как определяется NULL, а затем sys/_types/_null.h только для того, чтобы найти, что NULL на самом деле __DARWIN_NULL. Большой ! Теперь я не знаю, где искать, чтобы найти определение __DARWIN_NULL ...где __DARWIN_NULL определение макроса?

+1

Возможный дубликат http://stackoverflow.com/questions/18781514/correct-way-of-defining-null-and-null-pointer – Ari0nhh

+0

AFAIK, '__DARWIN_NULL' является встроенным компилятором, поэтому вы выиграли ' t найти его в любом файле заголовка. – user3386109

+3

Неясно, нужен ли вам символ 'nul' или указатель' NULL'. Какой бы вы ни вернули 0'. –

ответ

1

Я должен вернуть nul в функции, но мне не разрешено включать какую-либо библиотеку.

Решение этой проблемы намного проще, чем вы ее делаете; вы действительно попросили форму XY problem.

Вы не найдете символ NUL, определенный в любой стандартной библиотеке; лучший способ возврата, который будет использовать константу '\0' или 0.

Если ваш преподаватель учит вас избегать использования <stddef.h>, чтобы найти NULL, тогда он/она установил глупые упражнения, которые предполагают использование чего-то другого, кроме самого подходящего инструмента для задания, инструмент, гарантированный стандартом для существования , кстати ... я бы поднял это как проблему.

Тем не менее, иногда профессора не заботятся и научат вас делать глупые вещи. NULL определяется как константа нулевого указателя, определяемая реализацией, обычно 0 или преобразование 0 в void * следующим образом: ((void *) 0). Это может быть не определенное реализацией значение, которое разрешает ваш NULL; в этом случае отрегулируйте в соответствии с требованиями:

Вы можете добавить определение препроцессора, например #define NULL ((void *) 0), а затем вы сможете использовать функции return NULL;. Та-да! Глупые упражнения заслуживают глупых решений.

Если ваш профессор говорит, что вам запрещено использовать #define, то у меня возникнет соблазн спросить его, что вам разрешено использовать . Изменение требований «на лету» несправедливо. Большинство компиляторов позволят вам установить константы препроцессора, используя аргумент командной строки, например cc -DNULL='((void *) 0) ...'. Это полезно для отображения параметров конфигурации времени компиляции, но опять же, используя эту опцию для определения NULL, это глупо.


Вопрос в вашем названии отличается от остальной части вашего сообщения. __DARWIN_NULL также можно определить с использованием любого из вышеперечисленных, если оно еще не определено, но я действительно не думаю, что это необходимо для ответа на ваш реальный вопрос.

Смежные вопросы