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.

5
Warum werden Aussagen ohne Wirkung in C als legal angesehen?
Entschuldigen Sie, wenn diese Frage naiv ist. Betrachten Sie das folgende Programm: #include <stdio.h> int main() { int i = 1; i = i + 2; 5; i; printf("i: %d\n", i); } Im obigen Beispiel erscheinen die Anweisungen 5;und i;völlig überflüssig, der Code wird jedoch standardmäßig ohne Warnungen oder Fehler …
13 c 

5
Ein bisschen mit einem Booleschen vergleichen
Angenommen, ich habe eine Reihe von Flags, die in einem uint16_t codiert sind flags. Zum Beispiel AMAZING_FLAG = 0x02. Jetzt habe ich eine Funktion. Diese Funktion muss prüfen, ob ich das Flag ändern möchte, denn wenn ich das tun möchte, muss ich in Flash schreiben. Und das ist teuer. Daher …

1
Warum wird die von time () angegebene Zeit manchmal 1 Sekunde hinter der Sekundenkomponente von timespec_get () im C-Code angegeben?
Der folgende Codeausschnitt: struct timespec ts; for (int x = 0; x < 100000000; x++) { timespec_get(&ts, TIME_UTC); long cTime = (long) time(NULL); if (cTime != ts.tv_sec && ts.tv_nsec < 3000000) { printf("cTime: %ld\n", cTime); printf("ts.tv_sec: %ld\n", ts.tv_sec); printf("ts.tv_nsec: %ld\n", ts.tv_nsec); } } erzeugt diese Ausgabe: ... cTime: 1579268059 ts.tv_sec: …
12 c  time  posix  timespec 


1
Warum ein Makro für eine Funktion mit demselben Namen definieren?
Ich habe den folgenden Code unter https://github.com/torvalds/linux/blob/master/arch/x86/include/asm/atomic.h gefunden static __always_inline bool arch_atomic_sub_and_test(int i, atomic_t *v) { return GEN_BINARY_RMWcc(LOCK_PREFIX "subl", v->counter, e, "er", i); } #define arch_atomic_sub_and_test arch_atomic_sub_and_test Was macht der #definewirklich? Wann ist das nötig?
12 c  linux-kernel 







1
Wird ein auf CHAR_MAX eingestellter Zeichenwert garantiert in CHAR_MIN umgebrochen?
Mein Code: #include <stdio.h> #include <limits.h> int main() { char c = CHAR_MAX; c += 1; printf("CHAR_MIN=%d CHAR_MAX=%d c=%d (%c)\n", CHAR_MIN, CHAR_MAX, c, c); } Ausgabe: CHAR_MIN=-128 CHAR_MAX=127 c=-128 () Wir sehen, dass, wenn wir eine charVariable inkrementieren CHAR_MAX, diese umbrochen wird CHAR_MIN. Ist dieses Verhalten garantiert? Oder handelt es …



1
C11 Atomic Acquire / Release und x86_64 mangelnde Lade- / Speicherkohärenz?
Ich habe Probleme mit Abschnitt 5.1.2.4 des C11-Standards, insbesondere mit der Semantik von Release / Acquire. Ich stelle fest, dass https://preshing.com/20120913/acquire-and-release-semantics/ (unter anderem) besagt, dass: ... Die Release-Semantik verhindert, dass die Schreibfreigabe mit einer Lese- oder Schreiboperation, die ihr in der Programmreihenfolge vorausgeht, im Speicher neu angeordnet wird. Also für …

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.