Registrierung Gästebuch Kalender Mitgliederliste Teammitglieder Häufig gestellte Fragen Suche Zur Startseite
HackBox Forum
Forum Linkliste Online Spiele Datenbank Forum Foto Galerie Chat Portalansicht des Forum

HackBox Forum » Gesellschaft & Lifestyle » Fun Forum » [C] auswerten, ohne dafür vorgesehene konstrukte » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen [C] auswerten, ohne dafür vorgesehene konstrukte
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
green
Haudegen



[meine Galerie]


Dabei seit: 19.09.2006
Beiträge: 595

[C] auswerten, ohne dafür vorgesehene konstrukte Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

foo ungleich 0 => print "right"
foo gleich 0 => print "wrong"

foo muss schon im code deklariert und initialisiert werden.

wie würdet ihr es realisieren? mir sind zwei möglichkeiten eingefallen.

nicht erlaubt sind if, while, for, etc... ergo alles, was eine bedingung inne hat. Augenzwinkern

da es nicht sooo schwer ist, könnte man ja wieder zum kürzesten code streben. großes Grinsen
07.03.2008 18:16 green ist offline Beiträge von green suchen Nehmen Sie green in Ihre Freundesliste auf
DarkSquirrel DarkSquirrel ist männlich
Kaiser


images/avatars/avatar-54.jpg
[meine Galerie]


Dabei seit: 02.07.2007
Beiträge: 1.102
Herkunft: ausm Ruhrpott

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

wenn du alles was eine bedingung beinhaltet ausschließt, dann wird das ziemlich unmöglich, da ja selbst ein && eine bedinung impliziert ...

sofern du implizite bedingungen zulässt, könnte man mit ausdrücken wie diesen hier arbeiten...

code:
1:
2:
(foo != 0) && printf("right");
(foo == 0) && printf("wrong");


die schreibweise ist nun explizit, damit jedem klar werden kann warum das funktioniert. wenn man auf länge achtet, würde es auch reichen:
code:
1:
2:
foo&&printf("right");
!foo&&printf("wrong");
liegt daran, dass c einen integer 0 mit false gleichsetzt, und alles ungleich 0 mit true ...

nach compiler optimierungen dürften beide schreibweisen den gleichen maschinencode erzeugen

(wer sich nu immernoch fragt, warum das ein if ersetzen kann: der && operator ist ein logisches und kein binäres "und" ... ausgewertet wird von links nach rechts... ist der ausdruck links vom operator "false", wird der ganze ausdruck false, und alles rechts vom operator wird gar nicht mehr geprüft, da es keinen einfluss mehr aus das ergebnis des ausdrucks hat... folglich wird die funktion printf gar nicht mehr ausgewertet/aufgerufen)

__________________
Gräten auf dem Sofakissen wird man wohl entfernen müssen.
07.03.2008 21:04 DarkSquirrel ist offline Beiträge von DarkSquirrel suchen Nehmen Sie DarkSquirrel in Ihre Freundesliste auf
green
Haudegen



[meine Galerie]


Dabei seit: 19.09.2006
Beiträge: 595

Themenstarter Thema begonnen von green
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

sachlich hatte ich es genau so - beides. geschockt



nach "längenoptimierungsversuchen" ist mir noch ne möglichkeit eingefallen: standardmäßig "wrong"

im code:

code:
1:
2:
3:
4:
5:
6:
main () {
	char *x="wrong", foo=1 && (x="right");
	puts (x);
}


x zeigt standardmäßig auf "wrong", damit ich beim eventuellen ändern nur mit einem && den initialisierungswert von foo abfragen muss.

ist er 1, wird x geändert, ansonsten nicht angerührt.

danach wird einfach das ergebnis ausgegeben.


hmm, wie kann die bedingung der zweiten schreibweise explizit sein, wenn ein && (nur?) eine bedingung impliziert?
07.03.2008 23:05 green ist offline Beiträge von green suchen Nehmen Sie green in Ihre Freundesliste auf
DarkSquirrel DarkSquirrel ist männlich
Kaiser


images/avatars/avatar-54.jpg
[meine Galerie]


Dabei seit: 02.07.2007
Beiträge: 1.102
Herkunft: ausm Ruhrpott

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

ich meinte die art und weise wie der ausdruck aufgebaut ist, nicht das es eine explizite bedinung ist.

foo&&blah()

ist für jemanden der in c nicht unbedingt fitt ist, nicht so leicht nachzuvollziehen

schreibt man dazu dass es gleichbedeutend mit

(foo != 0) && blah()

ist, wird die funktionsweise schnell klar:

es wird zunächst der ausdruck links des && operators auf wahr/falsch geprüft und dann gegebenenfalls der linke operand, wenn der gesammte ausdruck nicht schon nur noch falsch als ergebnis liefern kann ... es ging mir nur um die tatsache, dass bei einer boolschen entscheidung in c ein integer als boolscher operand gleichbedeutend dem ergebnis eines vergleichs dieses integers auf ungleich 0 ist ...

__________________
Gräten auf dem Sofakissen wird man wohl entfernen müssen.
07.03.2008 23:44 DarkSquirrel ist offline Beiträge von DarkSquirrel suchen Nehmen Sie DarkSquirrel in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen

Ähnliche Themen
Thread Gestartet Hits Antworten Letzte Antwort
[c] malloc () casten?! (Forum: Programmieren)   11.05.2008 14:50 von green   6.625 6   11.05.2008 19:37 von DarkSquirrel  
[C] crypted code (Forum: Programmieren)   28.08.2007 03:40 von green   12.196 13   03.05.2008 13:57 von DarkSquirrel  
[C] gesetzte bits eines integers zählen (Forum: Fun Forum)   07.03.2008 22:42 von DarkSquirrel   23.262 9   12.03.2008 03:14 von DarkSquirrel  
[C] mehrere Tasten gleichzeitig auswerten (Forum: Programmieren)   16.09.2007 03:35 von green   6.195 4   17.09.2007 09:32 von Holiday  
[C] Schleife: 0 bis 9 (Forum: Programmieren)   28.03.2007 15:53 von green   9.754 11   14.09.2007 04:24 von DarkSquirrel  

HackBox Forum » Gesellschaft & Lifestyle » Fun Forum » [C] auswerten, ohne dafür vorgesehene konstrukte

Views heute: 18.598 | Views gestern: 16.608 | Views gesamt: 86.439.874


© • www.hackbox.de forum.hackbox.de
Forensoftware: Burning Board 2.3.6 pl2, entwickelt von WoltLab GmbH
DB: 200.421s | DB-Abfragen: 61 | Gesamt: 0.199s | PHP: -100614.07% | SQL: 100714.07%