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.

6
(x | y) - y warum kann es nicht einfach x oder sogar `x | sein? 0`
Ich habe einen Kernel-Code gelesen und an einer Stelle habe ich einen Ausdruck in einer ifAnweisung wie gesehen if (value == (SPINLOCK_SHARED | 1) - 1) { ............ } wo SPINLOCK_SHARED = 0x80000000ist eine vordefinierte Konstante. Ich frage mich, warum wir brauchen (SPINLOCK_SHARED | 1) - 1- für die Typkonvertierung? …


2
Warum sind die Adressen von argc und argv 12 Bytes voneinander entfernt?
Ich habe das folgende Programm auf meinem Computer ausgeführt (64-Bit-Intel unter Linux). #include <stdio.h> void test(int argc, char **argv) { printf("[test] Argc Pointer: %p\n", &argc); printf("[test] Argv Pointer: %p\n", &argv); } int main(int argc, char **argv) { printf("Argc Pointer: %p\n", &argc); printf("Argv Pointer: %p\n", &argv); printf("Size of &argc: %lu\n", sizeof …




7
Warum kann ich nicht auf einen Zeiger auf Zeiger für ein Stapelarray zugreifen?
Bitte schauen Sie sich den folgenden Code an. Es wird versucht, ein Array als char**an eine Funktion zu übergeben: #include <stdio.h> #include <stdlib.h> static void printchar(char **x) { printf("Test: %c\n", (*x)[0]); } int main(int argc, char *argv[]) { char test[256]; char *test2 = malloc(256); test[0] = 'B'; test2[0] = 'A'; …
35 c 

4
Ist der strcasecmp-Algorithmus fehlerhaft?
Ich versuche, die strcasecmpFunktion in C erneut zu implementieren, und habe festgestellt, dass der Vergleichsprozess inkonsistent ist. Von man strcmp Die Funktion strcmp () vergleicht die beiden Zeichenfolgen s1 und s2. Das Gebietsschema wird nicht berücksichtigt (für einen Gebietsschema-fähigen Vergleich siehe strcoll (3)). Es gibt eine Ganzzahl zurück, die kleiner, …
34 c  strcmp 

7
Wie funktioniert der Zeigervergleich in C? Ist es in Ordnung, Zeiger zu vergleichen, die nicht auf dasselbe Array verweisen?
In Kapitel 5 von K & R (The C Programming Language 2nd Edition) habe ich Folgendes gelesen: Erstens können Zeiger unter bestimmten Umständen verglichen werden. Wenn pund qPunkt an den Mitgliedern des gleichen Array, dann Beziehungen wie ==, !=, <, >=etc. richtig funktionieren. Dies scheint zu implizieren, dass nur Zeiger …

4
Werden beim Aufruf von fork Threads kopiert?
Wenn ich ein Programm mit Threads habe und fork()ein Unix-basiertes System aufrufe, werden die Threads kopiert? Ich weiß, dass der virtuelle Speicher für den aktuellen Prozess 1: 1 in den neu erzeugten Prozess kopiert wird. Ich weiß, dass Threads einen eigenen Stapel im virtuellen Speicher eines Prozesses haben. Daher sollte …

6
Was ist der richtige Weg, um 2 Bytes in eine vorzeichenbehaftete 16-Bit-Ganzzahl umzuwandeln?
In dieser Antwort machte zwol diese Behauptung: Die korrekte Methode zum Konvertieren von zwei Datenbytes von einer externen Quelle in eine 16-Bit-Ganzzahl mit Vorzeichen besteht in folgenden Hilfsfunktionen: #include <stdint.h> int16_t be16_to_cpu_signed(const uint8_t data[static 2]) { uint32_t val = (((uint32_t)data[0]) << 8) | (((uint32_t)data[1]) << 0); return ((int32_t) val) - …


4
Wie heißt das (…) in C und C ++?
Eine der Verwendungen von ...besteht darin, verschiedene Entitäten in C und C ++ zu bezeichnen. Was ist sein Name? Wird es auf diese Weise als Operator oder als etwas anderes klassifiziert? Weitere Details zu ...? Edit: Ich kenne den Zweck von .... Ich frage nach dem Namen und der Klassifizierung, …

2
Warum erlaubt die BNF-Grammatik von C Deklarationen mit einer leeren Folge von Init-Deklaratoren?
Beim Durchsehen der BNF-Grammatik von C fand ich es seltsam, dass die Produktionsregel für eine Deklaration so aussah (laut https://cs.wmich.edu/~gupta/teaching/cs4850/sumII06/The%20syntax%20of%) 20C% 20in% 20Backus-Naur% 20form.htm ): <declaration> ::= {<declaration-specifier>}+ {<init-declarator>}* ; Warum einen *Quantifizierer (dh null oder mehr Vorkommen) für die verwenden init-declarator? Dadurch können Anweisungen wie int;oder void;syntaktisch gültig sein, …


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.