Als «c» getaggte Fragen

C ist eine universelle Programmiersprache, die für die Systemprogrammierung (Betriebssystem und eingebettet), Bibliotheken, Spiele und plattformübergreifende Programme verwendet wird. Dieses Tag sollte bei allgemeinen Fragen zur C-Sprache verwendet werden, wie in der Norm ISO 9899 definiert (die neueste Version, 9899: 2018, sofern nicht anders angegeben - auch tagversionsspezifische Anforderungen mit c89, c99, c11 usw. kennzeichnen). C unterscheidet sich von C ++ und sollte ohne einen rationalen Grund nicht mit dem C ++ - Tag kombiniert werden.

7
Grundlegendes zum Makro container_of im Linux-Kernel
Beim Durchsuchen des Linux-Kernels habe ich ein container_ofMakro gefunden, das wie folgt definiert ist: #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - offsetof(type,member) );}) Ich verstehe, was container_of tut, aber was ich nicht verstehe, ist der letzte Satz …

12
Vorzeichenüberlauf in C / C ++ erkennen
Auf den ersten Blick scheint diese Frage ein Duplikat von Wie erkennt man einen Ganzzahlüberlauf? es ist jedoch tatsächlich deutlich anders. Ich habe festgestellt, dass das Erkennen eines vorzeichenlosen Ganzzahlüberlaufs zwar ziemlich trivial ist, das Erkennen eines vorzeichenbehafteten Überlaufs in C / C ++ jedoch schwieriger ist, als die meisten …


6
Vorteile der reinen Funktion
Heute habe ich über reine Funktion gelesen und war verwirrt mit ihrer Verwendung: Eine Funktion gilt als rein, wenn sie denselben Wertesatz für denselben Eingangssatz zurückgibt und keine beobachtbaren Nebenwirkungen aufweist. zB strlen()ist eine reine Funktion, während rand()es eine unreine ist. __attribute__ ((pure)) int fun(int i) { return i*i; } …
81 c  pure-virtual 

5
"Int * nums = {5, 2, 1, 4}" verursacht einen Segmentierungsfehler
int *nums = {5, 2, 1, 4}; printf("%d\n", nums[0]); verursacht einen Segfault, während int nums[] = {5, 2, 1, 4}; printf("%d\n", nums[0]); nicht. Jetzt: int *nums = {5, 2, 1, 4}; printf("%d\n", nums); druckt 5. Auf dieser Grundlage habe ich vermutet, dass die Array-Initialisierungsnotation {} diese Daten blind in die …
81 c  arrays  pointers 

6
Enum-Konstanten verhalten sich in C und C ++ unterschiedlich
Warum macht das: #include <stdio.h> #include <limits.h> #include <inttypes.h> int main() { enum en_e { en_e_foo, en_e_bar = UINT64_MAX, }; enum en_e e = en_e_foo; printf("%zu\n", sizeof en_e_foo); printf("%zu\n", sizeof en_e_bar); printf("%zu\n", sizeof e); } Drucken 4 8 8in C und 8 8 8in C ++ (auf einer Plattform mit …
81 c++  c 

4
Was ist das Besondere an Strukturen?
Ich weiß, dass wir in C kein Array von einer Funktion zurückgeben können, sondern einen Zeiger auf ein Array. Aber ich möchte wissen, was das Besondere daran ist structs, dass sie von Funktionen zurückgegeben werden können, obwohl sie möglicherweise Arrays enthalten. Warum macht das structWrapping das folgende Programm gültig? #include …

4
POSIX-Threads und -Signale
Ich habe versucht, die Feinheiten der Interaktion von POSIX-Threads und POSIX-Signalen zu verstehen. Insbesondere interessiert mich: Wie lässt sich am besten steuern, an welchen Thread ein Signal gesendet wird (vorausgesetzt, es ist überhaupt nicht schwerwiegend)? Was ist der beste Weg, um einem anderen Thread (der möglicherweise gerade beschäftigt ist) mitzuteilen, …
81 c  pthreads  signals 

5
Die beste plattformübergreifende (tragbare) Mathematikbibliothek mit beliebiger Genauigkeit [geschlossen]
Geschlossen. Diese Frage entspricht nicht den Richtlinien für Stapelüberlauf . Derzeit werden keine Antworten akzeptiert. Möchten Sie diese Frage verbessern? Aktualisieren Sie die Frage so dass es beim Thema für Stack - Überlauf. Geschlossen vor 5 Jahren . Verbessere diese Frage Ich suche eine gute Mathematikbibliothek mit beliebiger Genauigkeit in …
81 c++  c  biginteger  bigdecimal  gmp 


10
Warum sollten Sie strncpy anstelle von strcpy verwenden?
Bearbeiten: Ich habe die Quelle für das Beispiel hinzugefügt. Ich bin auf dieses Beispiel gestoßen : char source[MAX] = "123456789"; char source1[MAX] = "123456789"; char destination[MAX] = "abcdefg"; char destination1[MAX] = "abcdefg"; char *return_string; int index = 5; /* This is how strcpy works */ printf("destination is originally = '%s'\n", …



8
Ld durch Gold ersetzen - Erfahrung?
Hat jemand versucht, goldstatt zu verwenden ld? gold verspricht viel schneller zu sein als ld, so dass es helfen kann, Testzyklen für große C ++ - Anwendungen zu beschleunigen, aber kann es als Ersatz für ld verwendet werden? Kann gcc/ g++direkt anrufen gold.? Gibt es bekannte Fehler oder Probleme? Obwohl …


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.