#define NULL 0 //for C
jest doskonałe określenie w C
np
char *ch = NULL ;
*ch++ ;// will cause error
powoduje błąd ponieważ ch skierowaną do niczego podczas wykonywania oświadczenie przyrost jest znana przez kompilator widząc wartość wskaźnika w tabeli przeglądowej być 0
jeśli u próby aktualizacji tego wskaźnika następnie w rzeczywistości zmieniasz zawartość regionu CODE , który zaczyna się od adresu fizycznego 0. Z tego powodu pierwszy wpis z tablicy stron przed regionu kodu zaczyna utrzymywana jest pusty
Czym dokładnie jest problem z coraz NULL skąd jesteś ma ?, czyli
#include <stddef.h>
lub
#include <cstddef>
jak wspomniałem w odpowiedzi @Johannes Rudolfa każde oszustwo zrobić, to nie może być bardzo przyszłościowe w obliczu rzeczy jak nullptr itp
EDYCJA: podczas gdy stdlib (i wiele innych) jest wymaganych do włączenia wartości NULL, stddef jest najbardziej kanonicznym nagłówkiem [i był przez dziesięciolecia].
PS Ogólnie rzecz biorąc, złym pomysłem jest angażowanie się w tego rodzaju sztuczki, chyba że masz naprawdę dobry powód. Nie rozszerzyłeś myślenia, które doprowadziło cię do poczucia potrzeby zrobienia tego. Jeśli mógłbyś dodać trochę szczegółów, to prawdopodobnie doprowadzi to do lepszych odpowiedzi. Inne osoby, które odpowiedziały na to pytanie, powinny również wskazać to w swoich odpowiedziach, ale przypuszczam, że FGITW jako FGITW radzi sobie najlepiej: D
EDYCJA 2: Jak zauważył @Yossarian: Jedynym usprawiedliwieniem jest to, że nie istnieje wartość NULL zdefiniowana w niezgodnie z językowymi formami w innym miejscu w systemie. Naga kompilacja bez nagłówków i/lub jeśli piszesz własną niestandardową bibliotekę standardową od podstaw, są przykładami takiej sytuacji. (W takim scenariuszu z czystą kością podążałbym za odpowiedzią @ lilburne'a (pamiętaj, aby użyć 0 w miarę możliwości))
Jaki język? C lub C++, to są bardzo różne języki. –
A dlaczego uważasz, że musisz to zrobić? –
Czy możesz zmienić nazwę zmiennej ch na coś innego (jak 'str'), ponieważ może to wprowadzić w błąd kogoś, kto czyta ją szybko, kto może ci powiedzieć, że jesteś zainteresowany obsługą NUL. (Ale moim prawdziwym pytaniem jest (jak zapytał @Neil Butterworth), DLACZEGO?) (Czy możesz wyjaśnić, co masz nadzieję osiągnąć? Czy starasz się, aby pojedynczy manifest miał stałą podwójną powinność jako zarówno wskaźnik, jak i postać NUL ? –