Alle Computer im LAN auflisten »»» GetComputerNameInLAN

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Alle Computer im LAN auflisten »»» GetComputerNameInLAN

Beitrag von Nino »

ts-soft hat geschrieben:
CSHW89 hat geschrieben:Siehst du denn das '~' vor den 'Defined's nicht :mrgreen:

lg kevin
[...]
Trotzdem, unmöglicher Stil.
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.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Alle Computer im LAN auflisten »»» GetComputerNameInLAN

Beitrag von STARGÅTE »

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.
Das ist Quatsch!
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
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Alle Computer im LAN auflisten »»» GetComputerNameInLAN

Beitrag von Nino »

STARGÅTE hat geschrieben:
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.
Das ist Quatsch!
Richtig, deine Antwort ist Quatsch.
Wenn Du verstanden hättest was ich geschrieben habe, wäre sie evtl. anders ausgefallen.
STARGÅTE hat geschrieben:~ ist Bitweise Not !
Gut erkannt. Deshalb hatte ich auch geschrieben:
~ operiert auf Bits
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!
Wäre, hätte, könnte, ...
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.
STARGÅTE hat geschrieben:Was du meinst wäre Not, was aber beim CompilerIf nicht nutzbar ist!
Nein, was ich meine ist dass man z.B. statt

Code: Alles auswählen

CompilerIf ~Defined(True, #PB_Constant)
   Debug "Hallo"
CompilerEndIf
besser schreiben sollte

Code: Alles auswählen

CompilerIf Defined(True, #PB_Constant) = #False
   Debug "Hallo"
CompilerEndIf
Das funktioniert durchaus.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Alle Computer im LAN auflisten »»» GetComputerNameInLAN

Beitrag von STARGÅTE »

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.
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
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: Alle Computer im LAN auflisten »»» GetComputerNameInLAN

Beitrag von PMV »

:?

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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Re: Alle Computer im LAN auflisten »»» GetComputerNameInLAN

Beitrag von Max_der_Held »

haha :D

Leute regen sich auf ^^ :D:D
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
Wahlweise beim 1. Code "nicht" mit "nott" ersetzen..

frohe Feiertage :)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Alle Computer im LAN auflisten »»» GetComputerNameInLAN

Beitrag von STARGÅTE »

@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)

Code: Alles auswählen

Macro Nicht 
  ~
EndMacro 
CompilerIf Nicht Defined(True, #PB_Constant) 
   Debug "Hallo"
CompilerEndIf 
#True gibt es aber , also sollte der Code nicht ausgeführt werden.

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
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Re: Alle Computer im LAN auflisten »»» GetComputerNameInLAN

Beitrag von Max_der_Held »

ah ja sry.. folgendig stimmts..:

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 -> :allright:
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Alle Computer im LAN auflisten »»» GetComputerNameInLAN

Beitrag von Nino »

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
Nein, der Compiler wird nicht direkt von Defined() gesteuert, sondern von CompilerIf.
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.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: Alle Computer im LAN auflisten »»» GetComputerNameInLAN

Beitrag von PMV »

:lol:

Und als was steht Defined() hinter CompilerIf? Als einer der beiden
Ausdrücke, die der Compiler auswertet :wink: Und da wir hier tatsächlich
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 :? ... aber wie Max
schon schrieb:
Max_der_Held hat geschrieben:haha :D

Leute regen sich auf ^^ :D:D
MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten