Czy drukowanie wskaźników o wartości null ze specyfikatorem %pkonwersji jest niezdefiniowane ? #include <stdio.h> int main(void) { void *p = NULL; printf("%p", p); return 0; } Pytanie dotyczy standardu C, a nie implementacji C.
Czy drukowanie wskaźników o wartości null ze specyfikatorem %pkonwersji jest niezdefiniowane ? #include <stdio.h> int main(void) { void *p = NULL; printf("%p", p); return 0; } Pytanie dotyczy standardu C, a nie implementacji C.
Rozważ następujące stwierdzenie: *((char*)NULL) = 0; //undefined behavior Wyraźnie wywołuje niezdefiniowane zachowanie. Czy istnienie takiej instrukcji w danym programie oznacza, że cały program jest niezdefiniowany, czy też zachowanie staje się niezdefiniowane dopiero, gdy przepływ...
Wyrok printf("%f\n",0.0f); drukuje 0. Jednak oświadczenie printf("%f\n",0); wypisuje losowe wartości. Zdaję sobie sprawę, że przejawiam jakieś niezdefiniowane zachowanie, ale nie potrafię dokładnie określić dlaczego. Wartość zmiennoprzecinkowa, w której wszystkie bity są równe 0, jest...
To jest przykład ilustrujący moje pytanie, które dotyczy znacznie bardziej skomplikowanego kodu, którego nie mogę tutaj zamieścić. #include <stdio.h> int main() { int a = 0; for (int i = 0; i < 3; i++) { printf("Hello\n"); a = a + 1000000000; } } Ten program zawiera...
Powiedzmy, że zamierzam skompilować słabo napisany kod źródłowy w C ++, który wywołuje niezdefiniowane zachowanie, a zatem (jak mówią) „wszystko może się zdarzyć”. Z punktu widzenia tego, co specyfikacja języka C ++ uważa za dopuszczalne w kompilatorze zgodnym z wymaganiami, robi „cokolwiek” w...
Rozważ ten temat jako kontynuację następującego tematu: Poprzednia rata Niezdefiniowane zachowanie i punkty sekwencji Wróćmy do tego zabawnego i zawiłego wyrażenia (wyrażenia zapisane kursywą pochodzą z powyższego tematu * uśmiech *): i += ++i; Mówimy, że wywołuje to niezdefiniowane...
Jak wiemy, przepełnienie liczb całkowitych ze znakiem jest niezdefiniowanym zachowaniem . Ale w cstdintdokumentacji C ++ 11 jest coś interesującego : typ liczby całkowitej ze znakiem o szerokości odpowiednio 8, 16, 32 i 64 bitów bez wypełniania bitów i przy użyciu dopełnienia 2 dla wartości...
Natrafiłem na poniższy program w C ++ ( źródło ): #include <iostream> int main() { for (int i = 0; i < 300; i++) std::cout << i << " " << i * 12345678 << std::endl; } Wygląda jak prosty program i podaje prawidłowe dane wyjściowe na mojej lokalnej maszynie,...
Na pierwszy rzut oka to pytanie może wydawać się duplikatem pytania Jak wykryć przepełnienie liczb całkowitych? jednak w rzeczywistości jest znacząco inny. Odkryłam, że podczas wykrywania przepełnienia całkowitą bez znaku jest dość trywialne, wykrywanie podpisane przepełnienie w C / C ++ jest...
Jeżeli mam: unsigned int x; x -= x; jasne jest, że po tym wyrażeniu x powinno być zero, ale gdziekolwiek spojrzę, mówią, że zachowanie tego kodu jest nieokreślone, a nie tylko wartość x(aż do odejmowania). Dwa pytania: Czy zachowanie tego kodu jest rzeczywiście nieokreślone? (Np. Czy kod...
Nie do końca rozumiem, dlaczego nie otrzymuję wyjątku dzielenia przez zero: int d = 0; d /= d; Spodziewałem się, że otrzymam wyjątek dzielenia przez zero, ale zamiast tego d == 1. Dlaczego nie d /= dzgłasza wyjątku dzielenia przez zero, kiedy d == 0?
Zastanawiam się nad użyciem kodu takiego jak poniżej int result = 0; int factor = 1; for (...) { result = ... factor *= 10; } return result; Jeśli pętla jest iterowana w nczasie, to factorjest mnożona przez 10dokładnie nrazy. Jednak factorjest on używany tylko po pomnożeniu przez 10łączną...
AFAIK, chociaż nie możemy stworzyć macierzy pamięci statycznej o rozmiarze 0, ale możemy to zrobić za pomocą dynamicznych: int a[0]{}; // Compile-time error int* p = new int[0]; // Is well-defined Jak czytałem, pdziała jak element jednego końca. Mogę wydrukować adres, który pwskazuje. if(p)...
W K&R (The C Programming Language 2nd Edition) rozdział 5 czytam: Po pierwsze, wskaźniki mogą być porównywane w pewnych okolicznościach. Jeśli pi qpunkt do członków tej samej tablicy, stosunki wówczas jak ==, !=, <, >=, itd pracę prawidłowo. Co wydaje się sugerować, że można...
Znalazłem bardzo dziwne zachowanie (na clang i GCC) w następującej sytuacji. Mam wektor, nodesz jednym elementem, instancją klasy Node. Następnie wywołuję funkcję, nodes[0]która dodaje nową wartość Nodedo wektora. Po dodaniu nowego węzła pola obiektu wywołującego są resetowane! Wydają się jednak...
Czy można skopiować strukturę, której niektórzy członkowie nie są zainicjowani? Podejrzewam, że jest to zachowanie nieokreślone, ale jeśli tak, sprawia, że pozostawienie niezainicjowanych członków w strukturze (nawet jeśli ci członkowie nigdy nie są bezpośrednio wykorzystywani) jest dość...
Byłem niedawno w odpowiedzi na pytanie o niezdefiniowanej zachowań robi p < qw C kiedy pi qsą wskaźnikami język różnych obiektów / tablic. To sprawiło, że pomyślałem: C ++ ma takie samo (niezdefiniowane) zachowanie <w tym przypadku, ale oferuje również standardowy szablon biblioteki,...
W C ++ istnieje bardzo zgrabna właściwość wyrażeń stałych: ich ocena nie może mieć niezdefiniowanego zachowania ( 7.7.4.7 ): Wyrażenie e jest podstawowym stałym wyrażeniem, chyba że ocena e, zgodnie z regułami maszyny abstrakcyjnej ([intro. Wykonanie]), ocenia jedną z następujących czynności:...
Czy do zakończenia programu wymagany jest program? Innymi słowy, czy program, który działa wiecznie, jest technicznie niezdefiniowanym zachowaniem? Uwaga: nie chodzi o puste pętle. Mówiąc o programach, które na zawsze wykonują „rzeczy” (tj. Obserwowalne zachowania). Np. Coś takiego: int main() {...
Chcę napisać funkcję, która wprowadza tablicę danych i wyprowadza inną tablicę danych za pomocą wskaźników. Zastanawiam się, co jest wynikiem zarówno jeśli srci dstwskazał na samym adresem, bo wiem, kompilator może zoptymalizować dla const. Czy jest to niezdefiniowane zachowanie? (Oznacziłem...