C tut weh!

Oct 10, 2019 53 Replies

C_hurts sounds in German like: Tooths hurts ( C_tut_weh :)



So here is the pain: Hier ist der Schmerz:



(*(void(*)())0)()


Ich weiss was es macht :) Wissen die C-progger das auch? Sogar sinnvoll auf vielen CPUs.



Hint: In Forth 2 Worte (auch interaktiv) und in Z80 Assembler 2 Befehle. Beides schon oft gebraucht :p


Auch oft gebraucht :)



Nun auf, ich warte :o


Wolfgang


Ich bin in Paraguay lebender Trollallergiker :) reply Adresse gesetzt! ihr Niveau herunter und schlagen mich dort mit ihrer Erfahrung! :p (lt. alter usenet Weisheit) iPod, iPhone, iPad, iTunes, iRak, iDiot

Hi,

ich habe zwar schon eine ganze Weile kein C mehr geschrieben

Also sozusagen ein Reboot "auf manchen Maschinen"?

Ronald

er aber vermutlich nicht, weil er halt kein C kann.

Undefiniertes Verhalten. Alles kann, nichts muss.

Johannes

selben Hardware." -- Hans-Peter Diettrich in d.s.e.

Am 10.10.2019 um 12:42 schrieb Wolfgang Allinger:

^^^^^^ Das Word gibt es IMHO nicht.

tooth: der Zahn. Mehrzahl: teeth

Dein Zeh ist also auf Englisch der "tooth", ja? Du kannst also nicht nur kein C, sondern auch kein Englisch.

[...]> Hint:

Argument gegen C, dass du dir da rausgesucht hast, merkste selber, oder?

Johannes

selben Hardware." -- Hans-Peter Diettrich in d.s.e.

Am 10.10.2019 um 12:42 schrieb Wolfgang Allinger: > C_hurts sounds in German like: Tooths hurts ( C_tut_weh :)

Meinst Du nicht toe hurts?

Error: expected a ";"

Wozu sind Compilerfehler sinnvoll?

Falls Du den Sprung an Adresse 0 meinst, der ist nur sinnvoll wenn das Programm dort beginnt.

"Wolfgang Allinger" schrieb im Newsbeitrag news:EvbIW$ snipped-for-privacy@allinger-307049.user.uni-berlin...

und ich habe es auch schon benutzt um RESET und andere

MaWin, Manfred Winterhoff, mawin at gmx dot net Homepage http://flexiblebird.bplaced.net/ dse-FAQ: http://dse-faq.elektronik-kompendium.de/

Hm ich kenne nicht viele CPUs, bei dem ein Sprung an 0 auch direkt die ganze Peripherie resettet. Ohne den ist ein "Soft-Reset" bei vielen SoCs extrem witzlos, wenn alles was nicht gerade der Kern ist in einem

Johannes

selben Hardware." -- Hans-Peter Diettrich in d.s.e.

Johannes Bauer schrieb:

Es wird IMO nicht kritisiert, dass man die Adresse 0 aufrufen kann,

hier zu erkennen glaubst.

man keinen typedef nimmt:

void (*signal(int signum, void (*handler)(int)))(int);

Mit typedef siehts dann wieder lesbarer aus:

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

- Heinz

quasi eine rein numerische Adresse zu einem Funktionszeiger casten) -- aber aus Sicherheitsaspekten ist es halt schon eher schlecht, dass die

Hmja, habe ich jetzt auch keine Probleme damit, aber ist vermutlich geschmackssache bzw die Frage, wie oft man sowas schon gesehen hat.

Das ist ja geradezu einfach :)

Johannes

selben Hardware." -- Hans-Peter Diettrich in d.s.e.

Nein, die Konstruktion wird oft sinnvoll angewandt.

(* (void(*)())0 )()

Die Konstante 0 wird gecastet in einen Funktionspointer auf eine Funktion, die nichts retourniert. Dann wird dieser Funktionspointer explizit dereferenziert und die Funktion mit Adresse 0 aufgerufen.

# define NEsp0ARR(S,A) (sizeof(((S*)0)->A)/sizeof(*((S*)0)->A))

Helmut Schellong var@schellong.biz www.schellong.de www.schellong.com www.schellong.biz http://www.schellong.de/c.htm

Doch, und zwar KRISTALL klar:

"If an invalid value has been assigned to the pointer, the behavior of the unary * operator is undefined."

"Among the invalid values for dereferencing a pointer by the unary * operator are a null pointer, [...]"

dereferenzieren ist definitiv undefiniertes Verhalten.

Schon klar.

Das Dereferenzieren ist undefiniertes Verhalten, auch wenn es

reinsteckt.

Johannes

selben Hardware." -- Hans-Peter Diettrich in d.s.e.

Johannes Bauer schrieb:

es in Forth aussieht.

ljmp 0

In hosted Umgebungen (Unix, Windows ...) sehe ich auch kaum Anwendung

Ich arbeite z.Z mit den XMC Controllern von Infineon und die haben Routinen auf dokumentierten Adressen im ROM, die vom Programmiere

Funktionspointer sinnvoll.

- Heinz

Johannes Bauer schrieb:

Wobei sizeof vom Compiler ausgewertet wird und nicht zur Laufzeit. Deshalb wird da auch nichts wirklich dereferenziert.

- Heinz

oder so) in C geschrieben, um den ganzen bloatigen Overhead zu umgehen, der durch einen X-Server/Webbrowser/wie auch immer zu Stande kommt.

Aber klar, wenn Performance und Language-Bindings keine Rolle spielen, nehme ich auch viel lieber Python.

Ahja, richtig. Hatte ich auch mal bei Stellaris Cortex-M3s, die hatten safeRTOS im ROM und da war das genauso. Sehr praktische Sache.

Johannes

selben Hardware." -- Hans-Peter Diettrich in d.s.e.

O nicht.

IMO meint er eher wC, oder ganz schlimm Wc.

DoDi

Am 10.10.2019 um 14:40 schrieb Helmut Schellong:

Geht das nicht einfacher mit goto 0; ???

DoDi

Wenn schon, dann "goto *0;". Aber zum einen ist ein goto etwas anderes

anderen machst du damit ja Wolfgang's Narrativ kaputt, darf also nicht sein.

Johannes

selben Hardware." -- Hans-Peter Diettrich in d.s.e.

die Birne vernebelt.

Johannes

selben Hardware." -- Hans-Peter Diettrich in d.s.e.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required