Da bei meinem OS, einem kubuntu linux in der libc die c11 threads nicht
implementiert sind, und ich diese in gcc deshalb nicht benutzen konnte,
wollte ich einen fallback schreiben, welche alle aufrufe für c11 threads
durch aufrufe für pthread threads ersetzt.
Wenn keine c11 threads verfügbar sind, wird _STDC_NO_THREADS_
definiert, also wollte ich folgendes tun:
Wieso willst du __STDC_NO_THREADS__ undefinen? Meinst du, wenn du es
undefinest, ist der Thread-Support auf einmal da? ;-)
Lass es doch einfach definiert.
Yalu X. schrieb:> Wieso willst du __STDC_NO_THREADS__ undefinen? Meinst du, wenn du es> undefinest, ist der Thread-Support auf einmal da? ;-)
Nein, ich kümmere mich da ja darum, dass die Funktionen nachher zur
Verfügung stehen. Bis jetzt habe ich folgendes:
Das ist zwar noch unvollständig, aber da danach die Funktionen ja zur
Verfügung stehen, würde ich gerne dieses makro un-definieren. Ausserdem
frage ich mich, wieso dass nicht geht?
> Lass es doch einfach definiert.
Das wird wohl die einzige Möglichkeit sein...
Wahrscheinlich wird der Compiler dieses Makro irgendwie gesondert
behandeln. Dürfen tut er das nach ISO C, da alle Namen, die mit zwei
Unterstrichen gefolgt von einem Großbuchstaben anfangen, reserviert
sind. Da soll man als Programmierer eigentlich nicht dran rumspielen.
Es ist ja auch nicht sehr sinnvoll, dieses Makro wegzudefinieren.
Wenn die C-Standardbibliothek __STDC_NO_THREADS__ definiert, sagt das
aus, dass sie keine Thread-Unterstützung enthält. Selbst wenn man die
fehlenden Funktionen selber nachprogrammiert, sind diese Funktionen
immer noch nicht Bestandteil der Standardbibliothek. Folglich muss auch
__STDC_NO_THREADS__ definiert bleiben.
Aus diesem Grund warnt der GCC beim Wegdefinieren von Makros mit dem
Präfix __STDC_. Auch wenn es nicht ganz sauber ist: Man kann diese
Warnung auch einfach ignorieren. Komplett unterdrücken kann man sie m.W.
aber nicht.
Man könnte die neuen Thread-Funktionen – sofern sie dem Standard
entsprechen – in die (lokal installierte) Standardbibliothek aufnehmen
und dabei die Definition von __STDC_NO_THREADS__ entfernen. Bei der
GLibc ist diese Definition in /usr/inlcude/stdc-predef.h zu finden.