Podstawowe wytyczne C ++ mają zasadę ES.20: Zawsze inicjuj obiekt . Unikaj błędów wcześniej ustawionych i związanych z nimi niezdefiniowanych zachowań. Unikaj problemów ze zrozumieniem złożonej inicjalizacji. Uprość refaktoryzację. Ale ta zasada nie pomaga znaleźć błędów, tylko je ukrywa. Załóżmy, że program ma ścieżkę wykonania, w której wykorzystuje niezainicjowaną zmienną. …
Rozważ następującą instrukcję wyliczania i przełączania: typedef enum { MaskValueUno, MaskValueDos } testingMask; void myFunction(testingMask theMask) { switch (theMask) { case MaskValueUno: {}// deal with it case MaskValueDos: {}// deal with it default: {} //deal with an unexpected or uninitialized value } }; Jestem programistą Objective-C, ale napisałem to w …
Kiedy projektując własny język programowania, warto napisać konwerter, który pobiera kod źródłowy i konwertuje go na kod C lub C ++, aby móc użyć istniejącego kompilatora, takiego jak gcc, aby uzyskać kod maszynowy? Czy istnieją projekty wykorzystujące to podejście?
Mam te dwa małe programy: do #include <stdio.h> int main() { if (5) { printf("true\n"); } else { printf("false\n"); } return 0; } Jawa class type_system { public static void main(String args[]) { if (5) { System.out.println("true"); } else { System.out.println("false"); } } } który zgłasza komunikat o błędzie: type_system.java:4: …
Firma, w której pracuję, inicjuje wszystkie swoje struktury danych za pomocą funkcji inicjalizacji, takiej jak: //the structure typedef struct{ int a,b,c; } Foo; //the initialize function InitializeFoo(Foo* const foo){ foo->a = x; //derived here based on other data foo->b = y; //derived here based on other data foo->c = z; …
Wiem, że dość często słyszałem, że C zazwyczaj ma przewagę wydajności nad C ++. Tak naprawdę nie myślałem o niczym innym, dopóki nie zdałem sobie sprawy, że MSVC wydaje się nawet nie obsługiwać najnowszego standardu C, ale najnowszy obsługuje C99 (o ile mi wiadomo). Planowałem napisać bibliotekę z kodem do …
Wszyscy zdecydowanie używaliśmy typedefsi #defineraz lub drugi. Dzisiaj, pracując z nimi, zacząłem się nad czymś zastanawiać. Rozważ poniższe 2 sytuacje, aby użyć inttypu danych o innej nazwie: typedef int MYINTEGER i #define MYINTEGER int Podobnie jak w powyższej sytuacji, w wielu sytuacjach możemy bardzo dobrze osiągnąć coś za pomocą #define, …
Przez lata rozważałem zagłębianie się w języki, które uważam za „niskiego poziomu”. Dla mnie oznacza to C i montaż. Jednak nie miałem jeszcze na to czasu i NIGDY nie było to konieczne. Teraz, ponieważ nie widzę żadnej konieczności, czuję, że powinienem albo zaplanować jakiś moment w czasie, kiedy będę studiował …
Natknąłem się więc na wiele komentarzy / postów itp. Dotyczących bezpośredniego tworzenia plików makefile i tego, jak głupio jest to robić w 2015 roku. Zdaję sobie sprawę z narzędzi takich jak CMake, i faktycznie używam CMake dość często. Chodzi o to, że CMake po prostu tworzy plik Makefile dla Ciebie …
Preprocesor C jest dołączony do C, ale ma zupełnie inną składnię niż język główny: znaczące spoczynkowo białe znaki (koniec linii kończy instrukcję, przerwa po tym, jak makro określa początek listy zastępczej) bloki oparte na słowach kluczowych zamiast wzmocnionych bloków elifzamiastelse if definicje oparte na słowach kluczowych zamiast deklaracji odzwierciedla użycie, …
Przeglądałem programowanie w C i przeszkadza mi tylko kilka rzeczy. Weźmy na przykład ten kod: int myArray[5] = {1, 2, 2147483648, 4, 5}; int* ptr = myArray; int i; for(i=0; i<5; i++, ptr++) printf("\n Element %d holds %d at address %p", i, myArray[i], ptr); Wiem, że int może pomieścić maksymalną …
Wiem, że wskaźniki przechowują adresy. Wiem, że typy wskaźników są „ogólnie” znane na podstawie „typu” danych, na które wskazują. Jednak wskaźniki nadal są zmiennymi, a adresy, które przechowują, muszą mieć „typ” danych. Według moich informacji adresy są w formacie szesnastkowym. Ale nadal nie wiem, jaki „typ” danych to ten szesnastkowy. …
Jaka jest twoja ulubiona metoda deklarowania wskaźnika? int* i; lub int *i; lub int * i; lub int*i; Proszę wyjaśnić dlaczego. patrz także: http://www.stroustrup.com/bs_faq2.html#whitespace
Jakie zalety literałów łańcuchowych jako tylko do odczytu uzasadniają (-ies / -ied): To kolejny sposób na zastrzelenie się w stopę char *foo = "bar"; foo[0] = 'd'; /* SEGFAULT */ Niemożność eleganckiego zainicjowania tablicy słów do odczytu i zapisu w jednym wierszu: char *foo[] = { "bar", "baz", "running out …
W językach takich jak C i C ++, używając wskaźników do zmiennych, potrzebujemy jeszcze jednej lokalizacji pamięci do przechowywania tego adresu. Czy to nie jest narzut pamięci? Jak to jest kompensowane? Czy wskaźniki są używane w aplikacjach o krytycznym czasie niskiej pamięci?
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.