Forum: PC-Programmierung Einstieg, möglichst nah an C?


von X- R. (x-rocka)


Lesenswert?

Moin,

ich muss endlich mal lernen, kleine Windows-Anwendungen zu schreiben, um 
etwas komfortabler meine eigene Hardware auszulesen  Daten  Kommandos 
per Windows-Knopfdruck senden  & empfangen etcpp. Habe bisher "nur" 
8-32-bit uCs (C und ASM) programmiert.
Anwendung wäre zB über COM Port oder VCP Daten einzulesen und grafisch 
(einfach, zB Eingangsdaten über Zeit(grob)) darzustellen.
Nur, womit, wie anfangen?

Es sollte:
- möglichst umsonst sein
- nah an C sein (noch besser wäre natürlich ANSI-C :-) ).
- nicht Gigabytes an Festplattenplatz benötigen

Tipps?

Danke,
X

von thorstendb (Gast)


Lesenswert?

Gibtz nicht immer auch ne Home-Free Version des Visual Studio?

von Troll (Gast)


Lesenswert?

???
Du kaufst dir ein Buch für C->öffnest den Editor->programmierst

Kompilieren kannst du mit dem freien GCC.

von Yalu X. (yalu) (Moderator)


Lesenswert?

X- Rocka schrieb:
> Es sollte:
> - möglichst umsonst sein
> - nah an C sein (noch besser wäre natürlich ANSI-C :-) ).
> - nicht Gigabytes an Festplattenplatz benötigen

Vielleicht ANSI-C? Z.B. in Form von MinGW:

  http://www.mingw.org/

Ziemlich nahe an C (weitgehend abwärtskompatibel) ist C++ (MinGW, Visual
C++). Damit sind GUIs leichter zu programmieren. Einige GUI-Bibliotheken
setzen C++ sogar voraus.

von Oliver (Gast)


Lesenswert?

Yalu X. schrieb:
> Einige GUI-Bibliotheken
> setzen C++ sogar voraus.

Wobe "einige GUI-Bibliotheken" vor allem voraussetzt, daß man solche 
überhaupt hat, Wws bei "möglichst kostenlos" nicht immer der Fall ist. 
Ohne wird es arg mühsam.

Am schnellsten kommt man mE. für ein paar Buttons etc. mit Java ans Ziel 
(oder mit Visual Basic, aber das ist nicht jedermanns Sache). Ob Java 
mit Sun's NetBeans oder mit Eclipse, ist Geschmackssache.

Oliver

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Zwar kann man Windows-Programme auch in klassischem ANSI-C (resp. 
C89/C99) schreiben, aber sobald sie eine Programmoberfläche mit 
Dialogen, Knöpfen etc. bekommen sollen, wird das ziemlich aufwendig.
Ein großes Problem hierbei ist der Paradigmenwechsel zwischen der 
gewohnten Ablaufprogrammierung und der ereignisorientierten 
Programmierung, die Windows erforderlich macht.

Eine gute und ausführliche Einleitung in das Thema bietet das Buch 
"Programming Windows" von Charles Petzold.

Spätestens nach der Lektüre dieses Buches versteht man, warum C++ mit 
Klassenbibliotheken eine gar nicht so schlechte Idee ist ...

von ich (Gast)


Lesenswert?

Eine sehr nützliche Sprache wäre AutoIt.
Nachteil: langsam und BASIC-ähnlich, nur für Windows
Vorteil: gratis, braucht wenig Platz auf der Platte, kann so ziemlich 
alles

von X- R. (x-rocka)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Eine gute und ausführliche Einleitung in das Thema bietet das Buch
> "Programming Windows" von Charles Petzold.

Oliver schrieb:
> Am schnellsten kommt man mE. für ein paar Buttons etc. mit Java ans Ziel
> (oder mit Visual Basic, aber das ist nicht jedermanns Sache). Ob Java
> mit Sun's NetBeans oder mit Eclipse, ist Geschmackssache.

Yalu X. schrieb:
> Vielleicht ANSI-C? Z.B. in Form von MinGW:
>
>   http://www.mingw.org/

Danke schon mal, werde ich mir alles ankucken!
Hmmm, Java?

von Arc N. (arc)


Lesenswert?

Oliver schrieb:
> Am schnellsten kommt man mE. für ein paar Buttons etc. mit Java ans Ziel
> (oder mit Visual Basic, aber das ist nicht jedermanns Sache). Ob Java
> mit Sun's NetBeans oder mit Eclipse, ist Geschmackssache.

Wenn dann schon die besser passende Variante ohne VB, also C# + .NET.
Entweder mit dem Visual Studio Express oder mit SharpDevelop 
(http://www.icsharpcode.net/OpenSource/SD/Download/)

von Peter (Gast)


Lesenswert?

Hi,
man sollte sich vielleicht auch nochmal Qt anschauen.
Integriert ins Visual Studio via Plugin ist das derzeitig mein Favorit.
Gruß

von willibald (Gast)


Lesenswert?

X- Rocka schrieb:
> Es sollte:
> - nah an C sein (noch besser wäre natürlich ANSI-C :-) ).

GUI-Programmierung mit ANSI-C ist was für Leute, die kein 
Schmerzempfinden haben.

Natürlich musst du machen, was du selber willst, aber nur um ein 
bisschen Hardware auszulesen, würde ich es mir so einfach wie möglich 
machen und C# nehmen.

> - möglichst umsonst sein
Visual C# Express 2010

> - nicht Gigabytes an Festplattenplatz benötigen
Warum nicht? Wenn man in einem Bruchteil der Zeit fertig werden kann, 
ist der Plattenplatz doch völlig schnurz, oder?

von HolgerT (Gast)


Lesenswert?

willibald schrieb:
>> - nicht Gigabytes an Festplattenplatz benötigen
> Warum nicht? Wenn man in einem Bruchteil der Zeit fertig werden kann,
> ist der Plattenplatz doch völlig schnurz, oder?

Nein, das ist keinesfalls "schnurz". Klar, Du bist in einem Bruchteil 
der Entwicklungszeit fertig.

Oftmals zahlst Du dafür aber bei jedem Programmstart und bei der 
Ausführungszeit -jedesmal ein wenig- an Zeit drauf. Im Endeffekt kann es 
effektiver sein, in die Entwicklung zu investieren.

von X- R. (x-rocka)


Lesenswert?

Beim "Gigabyte" Problem geht's eher um meinen ziemlich vollen 
Arbeitsrechner...

Kann mir jemand in max. 3 Sätzen den Unterschied zwischen C++ und C# 
nennen?
Bitte! :)

von Du hast es so gewollt (Gast)


Lesenswert?

Bei C++ ist an zweiter und dritter Stelle je ein '+'.
Bei C#  ist an zweiter Stelle ein'#'.
Eine dritte Stelle gibt es bei C# nicht.
:)

von Sven H. (dsb_sven)


Lesenswert?

X- Rocka schrieb:
> Kann mir jemand in max. 3 Sätzen den Unterschied zwischen C++ und C#
> nennen?

Oh oh.. Mit der Frage wirst du vermutlich (zumindest nach meiner 
Erfahrung mit den Leuten hier) den totalen Flamewar vom Zaun brechen.

Besser ist vermutlich, wenn du dir dein eigenes Bild machst. Wikipedia 
ist da sehr hilfreich.

Und, selbst ausprobieren auf jeden Fall empfehlenswert. Es gibt für 
beide Sprachen kostenlose Entwicklungsumgebungen.

Mein persönlicher Favorit ist C#. Hab mal mit c und c++ angefangen, aber 
mit c# komme ich deutlich schneller zu Lösungen und ich fühle mich mit 
c# einfach viel viel wohler, als mit c++.


Kurz nen paar Unterschiede:

In c# basiert alles, ja, wirklich alles, auf Klassen. Sogar Wertetypen, 
wie integer sind Klassen.
In c# gibt es keine Pointer mehr. (nicht ganz richtig, aber der 
Bruttonormalprogrammierer braucht sie nicht mehr)
Die Weiterentwicklung von c# wird in erster Linie von einer Firma 
gesteuert. Das hat zur Folge, dass hinter der Sprache und der 
Weiterentwicklung ein Konzept steht. (Wird c++ eigentlich noch weiter 
entwickelt, oder nur ergänzt durch neue Bibliotheken?)


Du merkst schon, ich bin Fan von c#. Sicherlich gibt es mindestens genau 
so viele tolle Gründe, die für jede beliebige andere Sprache stehen. 
Schlussendlich musst du für dich entscheiden, womit du am besten klar 
kommst. Wenn du nur einfache Windowsanwendungen programmieren willst, 
tut das so ziemlich jede Sprache...

von X- R. (x-rocka)


Lesenswert?

Sven H. schrieb:
> ...

Danke, das ist doch schon mal was!

von Mark B. (markbrandis)


Lesenswert?

Sven H. schrieb:
> Wird c++ eigentlich noch weiter entwickelt

Selbstverständlich:
http://en.wikipedia.org/wiki/C%2B%2B0x

von willibald (Gast)


Lesenswert?

Sven H. schrieb:
> Kurz nen paar Unterschiede:

Und noch einer: C# verwendet im Gegensatz zu C++ eine sogenannte 
"verwaltete" Laufzeitumgebung. Das heißt, dein Programm erzeugt seine 
Objekte so, wie es sie braucht (mit new), gibt sie aber nicht mit delete 
wieder frei, sondern lässt sie einfach fallen.

Was in C++ ein schlimmer Fehler ist (Speicherleck), ist in C# das 
Normalste von der Welt, denn es gibt einen Garbage-Collector, der sich 
um alle runtergefallenen Objekte kümmert und sie wegräumt.

Das hat zwei große Vorteile:
1. Speicherfehler (vergessenes delete oder mehrfaches delete) können 
nicht mehr auftreten
2. Das Zerlegen alter Objekte findet dann statt, wenn das System etwas 
freie Zeit hat und nicht dann, wenn der Programmierer meint, das tun zu 
müssen. Das verringert kurzzeitige Lastspitzen und sorgt für eine 
insgesamt bessere Performance (solange das System Speicherreserven hat).

Wahr ist, dass im Mittel mehr Speicher belegt ist als bei Systemen ohne 
Garbagecollector. Für manche Leute ist diese Tatsache unerträglich, 
andere nehmen das angesichts der Vorteile ohne Zögern in Kauf.

von Sebastian (Gast)


Lesenswert?

Treffend gesagt - es sollte aber auch nicht unerwähnt bleiben, daß (hier 
droht schon der nächste Flamewar, ist klar) mit C# + .NET keine 
monolithischen Applikationen erzeugt werden können. Vom USB-Stick 
starten und läuft? Ist nicht. Das Framework ist immer erforderlich, und 
kann nicht "eingelinkt" werden. Für meine Anwendungen ein absolutes 
Ausschlußkrierium, aber bei großen Projekten als Problem 
vernachlässigbar.

von Yalu X. (yalu) (Moderator)


Lesenswert?

willibald schrieb:
> GUI-Programmierung mit ANSI-C ist was für Leute, die kein
> Schmerzempfinden haben.

Hast du denn schon einmal ein GUI für Windows in C programmiert? Arg
viel schlimmer als das, was danach kam (C++ mit MFC), ist das gar nicht.
Gerade bei anspruchsvolleren GUI-Anwendungen ist der Unterschied in der
Quellcodegröße nicht riesig. Die einzige wesentliche Neuerung war die
automatische Generierung von dem sowohl für WinAPI als auch MFC leider
unvermeidlichen Boilerplate-Code, was aber keine Errungenschaft von MFC
oder C++, sondern von Visual Studio war. In C musste man eben mehr
Copy/Paste machen.

Sicher hat sich das mittlerweile mit Windows Forms, WPF und was es da
sonst noch so alles gibt, deutlich geändert. Nur hätte dann deine
Aussage richtigerweise lauten müssen:

  "GUI-Programmierung mit GUI-Bibliotheken vor Windows Forms und WPF ist
  was für Leute, die kein Schmerzempfinden haben."

:)

von Walter S. (Gast)


Lesenswert?

Ich benutze für sowas Code Blocks. Das ist frei erhältlich sogar mit c++ 
compiler.

Beim erstellen des Projektes gibst du an was es werden soll 
(konsolenprogramm, Gui usw)
Hilfe für eine kleine Gui findendest du massenweise im netz!

Grüße :-)

von ich (Gast)


Lesenswert?

Ich habe vor ein paar Wochen angefangen mich mit C# zu beschäftigen und 
komme mittlerweile gut klar und kann einiges damit erreichen. Zuvor habe 
ich nur uC in C programmiert (AVR, C2000). Das Galileo Openbook zum 
Thema ist nicht schlecht - kann ich als Einstieg auf jeden Fall 
empfehlen. Ich hatte auch lange überlegt ob C++ oder C# und habe mich 
für letzteres entschieden, da mir der Einstieg einfacher erschien. Klar: 
wirklich plattformunabhängig ist das Ganze nicht, aber muss man das 
wirklich immer sein? Und die IDE (Visual Studio) ist IMO klasse.

von Platinenschwenker .. (platinenschwenker)


Lesenswert?

Yalu X. schrieb:
> willibald schrieb:
>> GUI-Programmierung mit ANSI-C ist was für Leute, die kein
>> Schmerzempfinden haben.
>
> Hast du denn schon einmal ein GUI für Windows in C programmiert? Arg
> viel schlimmer als das, was danach kam (C++ mit MFC), ist das gar nicht.

Der "alte" Petzold hat Windows-Programmierung mit Hilfe der reinen 
Win32-API eigentlich recht plausibel und sehr schön nachvollziehbar 
erlärt (ein tolles Buch). Für geübte C-Programmierer ist das denke ich 
eingängiger als sich in C++, also das programmieren in Klassen mit allem 
was dazu gehört, reinzufuchsen. Zumindest kleinere Progrämmchen bleiben 
da noch überschaubar.

Kann man noch immer gelegentlich gut benutzen.

Für kleinere Tools genügt oftmals auch ein Konsolenprogramm. Auch dort 
lässt sich schön die Win32-API einsetzen (falls Windows genügt und es 
nicht auch noch unter Linux laufen soll).

Und ansonsten lohnt C# eine Einarbeitung auf jeden Fall. Ich glaube das 
ist um Windows Programme zu erstellen im Endeffekt leichter zu erlernen 
und weniger fehlerträchtig als C++.

von C# Beginner (Gast)


Lesenswert?

Platinenschwenker .. schrieb:
> Der "alte" Petzold hat Windows-Programmierung mit Hilfe der reinen
> Win32-API eigentlich recht plausibel und sehr schön nachvollziehbar
> erlärt (ein tolles Buch).

Absolut. Ich habe die Ausgabe fuer Windows 3.1  1993 geholt.

Ich frage mich, ob managed Code (Java, C#) irgendwann auch für 
Mikrocontroller / embedded programming der Standard wird.

von ole (Gast)


Lesenswert?

Ich breche mal eine Lanze für Qt.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Platinenschwenker .. schrieb:
> Der "alte" Petzold hat Windows-Programmierung mit Hilfe der reinen
> Win32-API eigentlich recht plausibel und sehr schön nachvollziehbar
> erlärt (ein tolles Buch).

Das trifft zwar zu, aber Windows-Programme in C zu schreiben steht kaum 
über dem Programmieren von Windows-Programmen in x86-Assembler.

Der Petzold ist wichtig, um zu verstehen, wie Windows funktioniert, und 
das wiederum ist wichtig, um zu verstehen, was eine Klassenbibliothek 
wie die MFC macht, und das wiederum ist wichtig, um damit halbwegs 
erträgliche Programme hinzubekommen.

Ich spreche hier von mehreren Jahren harter Einarbeitungszeit.

Wer sich all das nicht antun will, sollte eine Klassenbibliothek oder 
Programmierumgebung verwenden, die weitere Abstraktionsschichten 
vorsieht, wie es einerseits die verschiedenen .Net-Ansätze (WinForms, 
Silverlight etc.) vornehmen, wie es andererseits auch im Qt umgesetzt 
wird.

von Platinenschwenker .. (platinenschwenker)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Platinenschwenker .. schrieb:
>> Der "alte" Petzold hat Windows-Programmierung mit Hilfe der reinen
>> Win32-API eigentlich recht plausibel und sehr schön nachvollziehbar
>> erlärt (ein tolles Buch).
>
> Das trifft zwar zu, aber Windows-Programme in C zu schreiben steht kaum
> über dem Programmieren von Windows-Programmen in x86-Assembler.

Das geht in der Tat per invoke auch ganz prächtig

http://www.movsd.com/masm.htm

Ist aber nach meinem Gefühl etwas schlechter überschaubar als ein 
Gründgerüst mit C-Construct.

> Der Petzold ist wichtig, um zu verstehen, wie Windows funktioniert,

Ganz bestimmt. Großartiges Buch.

> Wer sich all das nicht antun will, sollte eine Klassenbibliothek oder
> Programmierumgebung verwenden

Wäre der modernere Weg.

von Arc N. (arc)


Lesenswert?

C# Beginner schrieb:
> Ich frage mich, ob managed Code (Java, C#) irgendwann auch für
> Mikrocontroller / embedded programming der Standard wird.

Abgesehen von iOS sind (die meisten) Anwendungen z.B. für Android, webOS 
und Windows Phone 7 managed Code (Java, Javascript bzw. C#/VB/F#).
(auch wenn ObjC mittlerweile Garbage Collection kennt)
Für kleinere Systeme gibt's z.B. das .NET Micro Framework (vollständig 
unter Apache-Lizenz). Klein im Sinne von 32-Bit Microcontrollern mit 
min. 256 kiB-Flash und 64 kiB-RAM (was mittlerweile viele neuere 
Controller erfüllen)...

von C# Beginner (Gast)


Lesenswert?

Arc Net schrieb:
> Klein im Sinne von 32-Bit Microcontrollern mit
> min. 256 kiB-Flash und 64 kiB-RAM (was mittlerweile viele neuere
> Controller erfüllen)...

Zu embedded zählt man aber auch die 8-bit (z.B. Atmel) und 16-bit. Und 
diese werden wohl die Masse aller embedded Hardware ausmachen.
Wann werden wohl die Kaffeemaschinen mit managed code programmiert 
werden?

von Arc N. (arc)


Lesenswert?

C# Beginner schrieb:
> Arc Net schrieb:
>> Klein im Sinne von 32-Bit Microcontrollern mit
>> min. 256 kiB-Flash und 64 kiB-RAM (was mittlerweile viele neuere
>> Controller erfüllen)...
>
> Zu embedded zählt man aber auch die 8-bit (z.B. Atmel) und 16-bit.
> Und diese werden wohl die Masse aller embedded Hardware ausmachen.

OT:
Ein paar Zahlen: ARM bzw. deren Partner haben alleine im letzten Jahr
6000000000 (6 Mrd) ARM-Controller ausgeliefert... 1)
MIPS (nur 32-Bit und 64-Bit): 0.51 Mrd 2)
Microchip 1.3 Mrd 3)
Gesamtmarkt waren etwa 14 Mrd USD 4)
Durchschnittspreis für 8-Bit Controller 0.6 USD 5)
D.h. wären das nur 8-Bit Controller gewesen, wären es 24 Mrd Stück
Da die 16-Bit und 32-Bit Controller im Schnitt teurer sind, dürfte der 
Marktanteil von ARM größer als 25% sein.

1) 
http://www.arm.com/about/newsroom/arm-innovation-further-recognized-with-queens-award-for-enterprise-2011.php
2) http://www.mips.com/media/files/ir/MIPSInvestorPresOctober2010.pdf
3) 
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2059&mcparam=en552607
4) http://dataweek.co.za/article.aspx?pklarticleid=6668
5) 
http://www.avnetondemand.com/Technology%20Trends/Microcontroller+Market+overview+2010/channel/40/video/537/

von X- R. (x-rocka)


Lesenswert?

Danke nochmals an alle Antwortenden!

Leider bin ich noch nicht wirklich weiter mit der Entscheidung.
Ein Bekannter hat mir nochmal zu Visual Basic geraten, er meint das wäre 
der einfachste Weg schnell mal ne Windows Oberfläche zu bauen.

Eigentlich brauche ich vor allem sowas wie ein Scope für reinkommende 
Daten, und die Möglichkeit Daten (zB VCP input) umzuformatieren und 
abzuspeichern.
Sowas "schwer" in Visual Basic?

Ich kommme einfach noch nicht zum ausprobieren... muss mal ein paar 
Nachtschichten einlegen...

von sigges (Gast)


Lesenswert?

Mein Tipp
Back to the roots .... schau Dir mal freebasic an.
Komme auch aus der Controllerwelt und wollte schnell mal ein paar 
Kommunikationsroutinen für den PC schreiben, ohne viel Einarbeitszeit zu 
vergeuden.
Ging schnell und problemlos mit freebasic.

noch einen schönen Tag

von Lou C. (lou)


Lesenswert?

Hallo auch,

Ich bin nach über 10 Jahren Delphi (= effizient und schnell beliebig 
komplexe Windows Apps entwickeln) nun auf Visual Studio 2010 C# 
umgeschwenkt.

In ca. 3 Tagen hatte ich schon eine App mit relativ komplexen 
Funktionen.

GUI-bauen nahezu identisch zu Delphi (= sehr effizient / einfach).

Einzige Bedingung: WinXP+NET oder gleich Win7.

Ich kann mir nicht vorstellen, daß es eine einfacher und effizientere 
Umgebung für Windows gibt, die den Semi/Hobby-Coder glücklicher macht.

BTW:
Ich habe quasi eine "alte" Delphi-App nahezu 1:1 nach C#/VStudio 
portiert.
Im Vergleich (gleicher Rechner/OS) ist die Delphi App natürlich um 
Faktoren schneller; komplexe Tabellen/Grid-Operationen per GUI sind ca. 
Faktor 10 langsamer per VStudio. (sind halt alles keine echten binaries)
Aber einen Tot muß man halt sterben.

Ich kann C# speziell für Einsteiger nur empfehlen.
Und ja, Eclipse, GCC, Linux, Apple - alles ist besser -
wenn man sich einschränken will!

Basic hab ich immer vermieden. Wenns wirklich schnell gehen soll, nehme 
ich AutoIt+Scite (= kleine, schnell, "compilierbar", aber stark 
limitiert bei GUI und komplexeren Systemzugriffen)

Achja, die verfügbare "internet Community" darf man auch nicht 
unterschätzen. Bei M$ mit C# gibt es massenhaft Code den man einfach so 
aus dem INet ziehen kann.

greez,
lou

von Tcl/Tk (Gast)


Lesenswert?

Dann schau dir auch mal Tcl/Tk an.
Damit kann man sehr schnell ein GUI bauen.
Kann wunderbar mit der seriellen Schnittstelle umgehen.
Ist plattformunabhängig.

von chris (Gast)


Lesenswert?

Das hier könnte das richtige für Dich sein:
http://www.openframeworks.cc/

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.