Pytania otagowane jako c

C jest językiem programowania ogólnego przeznaczenia używanym do programowania systemu (system operacyjny i wbudowane), bibliotek, gier i platform. Tego znacznika należy używać z ogólnymi pytaniami dotyczącymi języka C, zgodnie z definicją w normie ISO 9899 (najnowsza wersja, 9899: 2018, o ile nie określono inaczej - także znaczniki specyficzne dla wersji za pomocą c89, c99, c11 itd.). C różni się od C ++ i nie należy go łączyć ze znacznikiem C ++ bez uzasadnionego powodu.

5
Jaka jest potrzeba tablicy z zerowymi elementami?
W kodzie jądra Linuksa znalazłem następującą rzecz, której nie mogę zrozumieć. struct bts_action { u16 type; u16 size; u8 data[0]; } __attribute__ ((packed)); Kod jest tutaj: http://lxr.free-electrons.com/source/include/linux/ti_wilink_st.h Jaka jest potrzeba i cel tablicy danych bez elementów?

3
Czy użycie if (0) do pominięcia przypadku w przełączniku powinno działać?
Mam sytuację, w której chciałbym, aby dwa przypadki w instrukcji przełącznika C ++ przechodziły do ​​trzeciego przypadku. W szczególności druga sprawa przechodziłaby do trzeciej sprawy, a pierwsza sprawa również przechodziłaby do trzeciej sprawy bez przechodzenia przez drugą sprawę. Miałem głupi pomysł, wypróbowałem go i zadziałało! I owinięty drugi przypadek w …

6
gniazdo connect () vs bind ()
Zarówno wywołania systemowe, jak connect()i bind()wywołania systemowe „kojarzą” deskryptor pliku gniazda z adresem (zwykle jest to kombinacja ip / port). Ich prototypy to: - int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); i int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); Jaka jest dokładna różnica między 2 połączeniami? …

3
Łączenie ciągów makr C / C ++
#define STR1 "s" #define STR2 "1" #define STR3 STR1 ## STR2 Czy można łączyć, że STR3 == "s1"? Możesz to zrobić, przekazując argumenty do innej funkcji Macro. Ale czy istnieje bezpośredni sposób?
121 c++  c  c-preprocessor 


8
Jak dokładnie działa rekurencja ogona?
Prawie rozumiem, jak działa rekurencja ogona i jaka jest różnica między nią a normalną rekurencją. Nie rozumiem tylko , dlaczego nie wymaga stosu do zapamiętania adresu zwrotnego. // tail recursion int fac_times (int n, int acc) { if (n == 0) return acc; else return fac_times(n - 1, acc * …

13
Znajdowanie duplikatów w czasie O (n) i przestrzeni O (1)
Dane wejściowe: biorąc pod uwagę tablicę n elementów, która zawiera elementy od 0 do n-1, przy czym każda z tych liczb pojawia się dowolną liczbę razy. Cel: znaleźć te powtarzające się liczby w O (n) i używając tylko stałej przestrzeni pamięci. Na przykład niech n wynosi 7, a tablica {1, …
121 c++  c  algorithm 

23
Co należy do narzędzia edukacyjnego, aby zademonstrować nieuzasadnione założenia, które ludzie przyjmują w C / C ++?
Chciałbym przygotować małe narzędzie edukacyjne dla SO, które powinno pomóc początkującym (i średnio zaawansowanym) programistom rozpoznać i zakwestionować ich nieuzasadnione założenia w C, C ++ i ich platformach. Przykłady: „zawijanie liczb całkowitych” „każdy ma ASCII” „Mogę przechowywać wskaźnik funkcji w pustej przestrzeni *” Doszedłem do wniosku, że mały program testowy …

17
Jaki jest sens malloc (0)?
Właśnie zobaczyłem ten kod: artist = (char *) malloc(0); ... i zastanawiałem się, dlaczego ktoś miałby to zrobić?
121 c  malloc 

21
Dlaczego adres zero jest używany jako wskaźnik zerowy?
W C (lub C ++ w tym przypadku) wskaźniki są szczególne, jeśli mają wartość zero: radzę ustawić wskaźniki na zero po zwolnieniu ich pamięci, ponieważ oznacza to, że ponowne zwolnienie wskaźnika nie jest niebezpieczne; kiedy wywołuję malloc, zwraca wskaźnik o wartości zero, jeśli nie może uzyskać pamięci; if (p != …
121 c++  c  memory  pointers 

22
Pozycja najmniej znaczącego bitu, który jest ustawiony
Szukam skutecznego sposobu na określenie pozycji najmniej znaczącego bitu, który jest ustawiony jako liczba całkowita, np. Dla 0x0FF0 byłoby to 4. Prosta implementacja jest taka: unsigned GetLowestBitPos(unsigned value) { assert(value != 0); // handled separately unsigned pos = 0; while (!(value & 1)) { value >>= 1; ++pos; } return …



6
Dlaczego wymagany jest segment .bss?
Wiem tylko, że zmienne globalne i statyczne są przechowywane w .datasegmencie, a niezainicjowane dane znajdują się w .bsssegmencie. Nie rozumiem, dlaczego mamy dedykowany segment dla niezainicjowanych zmiennych? Jeśli niezainicjalizowana zmienna ma przypisaną wartość w czasie wykonywania, czy ta zmienna nadal istnieje tylko w .bsssegmencie? W następnym programie ajest w .datasegmencie …

7
Przesyłaj na podłogę
Czy jest jakaś różnica między tymi: float foo1 = (int)(bar / 3.0); float foo2 = floor(bar / 3.0); Jak rozumiem, oba przypadki mają ten sam wynik. Czy jest jakaś różnica w skompilowanym kodzie?
120 c++  c  floating-point 

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.