So ist es, denn ~ operiert auf Bits, und Defined() liefert als Ergebnis einen logischen Wert. Ein Compiler mit strengerer Typüberprüfung würde solchen Code gar nicht ausführen.ts-soft hat geschrieben:[...]CSHW89 hat geschrieben:Siehst du denn das '~' vor den 'Defined's nicht![]()
lg kevin
Trotzdem, unmöglicher Stil.
Alle Computer im LAN auflisten »»» GetComputerNameInLAN
Re: Alle Computer im LAN auflisten »»» GetComputerNameInLAN
Re: Alle Computer im LAN auflisten »»» GetComputerNameInLAN
Das ist Quatsch!So ist es, denn ~ operiert auf Bits, und Defined() liefert als Ergebnis einen logischen Wert. Ein Compiler mit strengerer Typüberprüfung würde solchen Code gar nicht ausführen.
Hinweis: Hatte die Antwort falsch verstanden
~ ist Bitweise Not !
also %...0001 würde %...1110 werden, was immer noch <> 0 ist !
Zum Beispiel wäre ~1 = -2 und ~0 = -1
Deswegen geht der Code nur, wenn Defined() %...0000 zurück gibt, und dann %...1111 daraus wird!
Was du meinst wäre Not, was aber beim CompilerIf nicht nutzbar ist!
Code: Alles auswählen
CompilerIf ~Defined(True, #PB_Constant)
Debug "~1"
CompilerEndIf
CompilerIf ~Defined(Laber, #PB_Constant)
Debug "~0"
CompilerEndIf
CompilerIf Defined(True, #PB_Constant) = 0
Debug "1=0"
CompilerEndIf
CompilerIf Defined(Laber, #PB_Constant) = 0
Debug "0=0"
CompilerEndIf
Zuletzt geändert von STARGÅTE am 29.12.2010 19:42, insgesamt 1-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Alle Computer im LAN auflisten »»» GetComputerNameInLAN
Richtig, deine Antwort ist Quatsch.STARGÅTE hat geschrieben:Das ist Quatsch!So ist es, denn ~ operiert auf Bits, und Defined() liefert als Ergebnis einen logischen Wert. Ein Compiler mit strengerer Typüberprüfung würde solchen Code gar nicht ausführen.
Wenn Du verstanden hättest was ich geschrieben habe, wäre sie evtl. anders ausgefallen.
Gut erkannt. Deshalb hatte ich auch geschrieben:STARGÅTE hat geschrieben:~ ist Bitweise Not !
~ operiert auf Bits
Wäre, hätte, könnte, ...STARGÅTE hat geschrieben:also %...0001 würde %...1110 werden, was immer noch <> 0 ist !
Zum Beispiel wäre ~1 = -2 und ~0 = -1
Deswegen geht der Code nur, wenn Defined() %...0000 zurück gibt, und dann %...1111 daraus wird!
Defined() gibt einen logischen Wert zurück, d.h. #True oder #False, und logische Werte sind nicht aus diversen Bits zusammengesetzt. Dass PB z.Z. für #True 1 und für #False 0 verwendet ist eine ganz andere Sache. Das kann sich im Prinzip morgen ändern und liegt wie schon gesagt daran, dass der PB-Compiler keine strenge Typüberprüfung durchführt.
Nein, was ich meine ist dass man z.B. stattSTARGÅTE hat geschrieben:Was du meinst wäre Not, was aber beim CompilerIf nicht nutzbar ist!
Code: Alles auswählen
CompilerIf ~Defined(True, #PB_Constant)
Debug "Hallo"
CompilerEndIf
Code: Alles auswählen
CompilerIf Defined(True, #PB_Constant) = #False
Debug "Hallo"
CompilerEndIf
Re: Alle Computer im LAN auflisten »»» GetComputerNameInLAN
Ja sry, habe deine Antwort falsch verstanden.
Trotzdem frag ich dich:
"Defined() gibt einen logischen Wert zurück, d.h. #True oder #False"
Du meinst also Defined() hat den gleichen "Rückgabetypen" wie ein Vergleich A=B, C<D, welcher also Wahr und Falsch sein kann?
Sowas gibts meiner Meinung nach nicht in PureBasic.
Defined() ist eine "Funktion" wie jede andere welche eben nur 0 und 1 zurück gibt, was mit dem Wahr und Falsch wie wir es kennen nichts zu tun hat.
Deswegen schreiben wir ja auch
Defined(True, #PB_Constant) = #False
Weil wir hier die Zahl 1 mit #False also 0 vergleichen und nicht Wahr und Falsch.
Trotzdem frag ich dich:
"Defined() gibt einen logischen Wert zurück, d.h. #True oder #False"
Du meinst also Defined() hat den gleichen "Rückgabetypen" wie ein Vergleich A=B, C<D, welcher also Wahr und Falsch sein kann?
Sowas gibts meiner Meinung nach nicht in PureBasic.
Defined() ist eine "Funktion" wie jede andere welche eben nur 0 und 1 zurück gibt, was mit dem Wahr und Falsch wie wir es kennen nichts zu tun hat.
Deswegen schreiben wir ja auch
Defined(True, #PB_Constant) = #False
Weil wir hier die Zahl 1 mit #False also 0 vergleichen und nicht Wahr und Falsch.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Alle Computer im LAN auflisten »»» GetComputerNameInLAN

Defined() ist eine Compilerdirektive wie ein selbst erstelltes Macro.
Genau genommen wird der Compiler damit direkt gesteuert, den
dieser schaut hier in einer internet Liste nach, ob die Variabe,
Konstante, usw. bekannt ist oder nicht und compiliert den
nachfolgenen Codeblock oder eben nicht, da er nur
mit CompilerIf zulässig (und sinnvoll) ist.
MFG PMV
- Max_der_Held
- Beiträge: 595
- Registriert: 18.04.2006 17:01
- Wohnort: Bavaria
- Kontaktdaten:
Re: Alle Computer im LAN auflisten »»» GetComputerNameInLAN
haha
Leute regen sich auf ^^
:D
ich wäre für diese Lösung:
ODER, auch für ~programmierer (Nicht-programmierer) leichter verständlich:
Wahlweise beim 1. Code "nicht" mit "nott" ersetzen..
frohe Feiertage

Leute regen sich auf ^^

ich wäre für diese Lösung:
Code: Alles auswählen
Macro Nicht
~
EndMacro
CompilerIf Nicht Defined(haus, #PB_Constant)
Debug "Hallo"
CompilerEndIf
ODER, auch für ~programmierer (Nicht-programmierer) leichter verständlich:
Code: Alles auswählen
Macro Wenn_Haus_defined_ist
CompilerIf ~ Defined(haus, #PB_Constant)
EndMacro
Macro Dann_schreibe_hallo
Debug "hallo"
EndMacro
Macro Und_gehe_nach_Haus_e
CompilerEndIf
EndMacro
Wenn_Haus_defined_ist
dann_schreibe_hallo
Und_gehe_nach_Haus_e
frohe Feiertage

Re: Alle Computer im LAN auflisten »»» GetComputerNameInLAN
@PMV
Alles klar, es gibt also garkein Typ ^^
@Max_der_Held
Wir waren uns doch alle einig das ~ (Bitweise Not) hier falsch ist!
(Scheinbar bin ich nicht der einzige, der hier einiges durcheinander wirft)
#True gibt es aber , also sollte der Code nicht ausgeführt werden.
Dein Macro muss so lauten:
Alles klar, es gibt also garkein Typ ^^
@Max_der_Held
Wir waren uns doch alle einig das ~ (Bitweise Not) hier falsch ist!
(Scheinbar bin ich nicht der einzige, der hier einiges durcheinander wirft)
Code: Alles auswählen
Macro Nicht
~
EndMacro
CompilerIf Nicht Defined(True, #PB_Constant)
Debug "Hallo"
CompilerEndIf
Dein Macro muss so lauten:
Code: Alles auswählen
Macro Nicht
0 =
EndMacro
CompilerIf Nicht Defined(True, #PB_Constant)
Debug "Hallo"
CompilerEndIf
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- Max_der_Held
- Beiträge: 595
- Registriert: 18.04.2006 17:01
- Wohnort: Bavaria
- Kontaktdaten:
Re: Alle Computer im LAN auflisten »»» GetComputerNameInLAN
ah ja sry.. folgendig stimmts..:
ps.. was ich mich frage.. warum es mit dem "doppelten" compilerendif geht, solange die Konstante definiert ist.. sobald man sie rausnimmt sagt er "doppeltes compilerendif"
Makro-fehler?..
pps: dein Code ist aber auch ausgefeilt!. Respekt ->
Code: Alles auswählen
Macro Wenn_Haus_defined_ist
CompilerIf ((~Defined(haus,#PB_Constant)) & %00000001)
EndMacro
Macro Dann_schreibe_hallo
Debug "hallo"
EndMacro
Macro Und_gehe_nach_Haus_e
CompilerEndIf
EndMacro
#haus = 1
Wenn_Haus_defined_ist
dann_schreibe_hallo
Und_gehe_nach_Haus_e
CompilerEndIf
ps.. was ich mich frage.. warum es mit dem "doppelten" compilerendif geht, solange die Konstante definiert ist.. sobald man sie rausnimmt sagt er "doppeltes compilerendif"
Makro-fehler?..
pps: dein Code ist aber auch ausgefeilt!. Respekt ->

Re: Alle Computer im LAN auflisten »»» GetComputerNameInLAN
Nein, der Compiler wird nicht direkt von Defined() gesteuert, sondern von CompilerIf.PMV hat geschrieben:
Defined() ist eine Compilerdirektive wie ein selbst erstelltes Macro.
Genau genommen wird der Compiler damit direkt gesteuert, den
dieser schaut hier in einer internet Liste nach, ob die Variabe,
Konstante, usw. bekannt ist oder nicht und compiliert den
nachfolgenen Codeblock oder eben nicht, da er nur
mit CompilerIf zulässig (und sinnvoll) ist.
MFG PMV
CompilerIf vergleicht 2 Ausdrücke miteinander, die Steuerung ist abhängig vom Ergebnis des Vergleichs. Einer der beiden Ausdrücke ist in diesem Fall Defined(). Defined() gibt an, ob des betr. Objekt bereits definiert ist oder nicht, es ist offensichtlich dass der Wert also entweder #True oder #False ist.
Re: Alle Computer im LAN auflisten »»» GetComputerNameInLAN

Und als was steht Defined() hinter CompilerIf? Als einer der beiden
Ausdrücke, die der Compiler auswertet

nur vom Compiler reden, der hier sein verhalten ändert, gibs hier auch
keine klassischen Rückgabewerte wie es in einem Programm wäre. Das
Defined() intern natürlich als Ergebnis ein "Rückgabewert" hat, der mit
dem 2. Audruck verglichen wird ... ist ja wohl klar

schon schrieb:
MFG PMVMax_der_Held hat geschrieben:haha![]()
Leute regen sich auf ^^:D