• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Czy mozna do funkcji wysłać wartość NULL - c++

Object Storage Arubacloud
0 głosów
1,510 wizyt
pytanie zadane 9 maja 2017 w C i C++ przez seba Dyskutant (8,900 p.)
Mam takie pytanie czy można do funkcji wysłać takie cos twojafunkcja(null,null)

3 odpowiedzi

+2 głosów
odpowiedź 9 maja 2017 przez mokrowski Mędrzec (155,460 p.)
wybrane 10 maja 2017 przez seba
 
Najlepsza

Standard języka C mówi że NULL ma się dać porównać do 0 (zera) nie definiuje jednak że ma być zerem! To oznacza że zawsze go należy porównywać do zera a nie zakładać że jest reprezentowany przez zero (bo może nie być). Niestety NULL także poddaje się niejawnym konwersjom do int i bywa definiowany przez... makro :-/ Nie posiada także definiowanego własnego typu co uniemożliwia wywołania polimorficzne.

Język tak w C (po C99) jak i w C++ (oj nie będę strzelał po której rewizji standardu...), zapewnione jest poprawne wykonanie zwolnionej pamięci wskazywanej przez NULL lub nullptr. free (dla C) lub delete (dla C++) nie robi wtedy.... nic :-)

Stąd przechodząc do sedna. Nie wywołuj funkcji z NULL a staraj się używać dostępnego po 2011 w C++ nullptr wraz z typem nullptr_t.

Tu masz przykład programu testowego działającego w g++ i clang++. Kompilatory MS także mają jakiś odpowiednik __PRETTY_FUNCTION__ ale go nie znam:

#include <iostream>

void fun1(int *, int *) {
    std::cout << __PRETTY_FUNCTION__ << std::endl;
}

void fun2(int *, int *) {
    std::cout << __PRETTY_FUNCTION__ << std::endl;
}

void fun2(std::nullptr_t, std::nullptr_t) {
    std::cout << __PRETTY_FUNCTION__ << std::endl;
}

void fun3(int, int) {
    std::cout << __PRETTY_FUNCTION__ << std::endl;
}

int main() {
    int a = 42;
    int b = 43;

    fun1(NULL, NULL);
    fun2(&a, &b);
    fun2(nullptr, nullptr);
    fun3(NULL, NULL); // Tu w szanującym się kompilatorze pojawi się warning..
}

Wynik działania dla clang++:

void fun1(int *, int *)
void fun2(int *, int *)
void fun2(std::nullptr_t, std::nullptr_t)
void fun3(int, int)

Zwróć uwagę że fun2(...) jest wybierane polimorficznie a fun3(...) jest "małym skandalem konwersji" :-)

komentarz 9 maja 2017 przez jpacanowski VIP (101,940 p.)
std::nullptr_t

Od czasu jak się rozstałem z C++, ten język na prawdę się udziwnił...

Wolę jednak C...

MessageBox( NULL, "To jest wiadomość.", "Wiadomość", MB_ICONINFORMATION | MB_OKCANCEL );

komentarz 10 maja 2017 przez draghan VIP (106,230 p.)

Od czasu jak się rozstałem z C++, ten język na prawdę się udziwnił...

A będzie "udziwniał" się jeszcze bardziej, bo już jedną nogą jesteśmy w standardzie C++17. :) Akurat nullptr_t jest bardzo pożytecznym stworzeniem.

0 głosów
odpowiedź 9 maja 2017 przez UltraSF Stary wyjadacz (11,740 p.)
tak
–1 głos
odpowiedź 9 maja 2017 przez Knayder Nałogowiec (37,640 p.)
NULL to po prostu cyfra 0
komentarz 9 maja 2017 przez radek024 Szeryf (77,160 p.)
W takim razie czy NULL jest równy również ""? Tak z ciekawości :D
komentarz 9 maja 2017 przez Knayder Nałogowiec (37,640 p.)
Myślę że to nie problem sprawdzić to na szybko takim prostym programikiem.
http://ideone.com/Hg9B0u
komentarz 9 maja 2017 przez jpacanowski VIP (101,940 p.)

W takim razie czy NULL jest równy również ""? Tak z ciekawości :D

Nie, NULL to nic innego jak:

#define NULL  ((void *) 0)

https://github.com/jpacanowski/GekonOS/blob/master/kernel/include/types.h

komentarz 10 maja 2017 przez j23 Mędrzec (194,920 p.)

NULL to może być po prostu wartość 0.

komentarz 10 maja 2017 przez Knayder Nałogowiec (37,640 p.)

W c++ NULL to po prostu zero:
https://i.imgur.com/DcqDmsE.jpg

Podobne pytania

0 głosów
1 odpowiedź 252 wizyt
+1 głos
1 odpowiedź 1,375 wizyt
pytanie zadane 20 listopada 2017 w C i C++ przez artur96 Początkujący (250 p.)
0 głosów
1 odpowiedź 309 wizyt

92,556 zapytań

141,403 odpowiedzi

319,559 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...