Windows und Linux Programme

Phantomic

Erfahrenes Mitglied
Hi,
ich bin grad dabei C++ zu lernen. Meine Frage ist es ob ich eigenltich wenn ich von Windows auf Linux umsteige wieder alles neu lernen muss. Programme unter Linux laufen ja wahrscheinlich völlig anders ab als unter Windows. Unter Linuc gibt es ja bestimmt MFC. (Auch wenn ich die noch lange nicht brauche)
 
Also die APIs unterscheiden sich teilweise sehr gravierend sind aber an anderer stelle wieder extrem ähnlich.

MFC kannste unter linux knicken
winapi deto.

Das heißt solange du dich an das in libc api hältst bist du auch kompatibel.
das heißt
stdio.h stdlib.h conio.h unistd.h/dos.h teilweise process.h und die STL

sobald es an erweiterte sachen geht, und das fängt schon bei multithreading an, gehen die APIs auseinander.

z.B. in windows... _beginthread() das wirste in unix nicht finden. pthread_create() glaub ich heißt es da, nagel mich aber nich drauf fest.

Und wenn es dann an fenster un ähnliches geht dann is es ganz aus... die einzige class library die gleich ich ist die STL...
 
chibisuke hat mit den APIs und MFC,... natürlich recht.
C++ aber ansich bleibt wie es ist. Du musst den Source-Code nur für jedes Betriebsystem einzeln compiliern. Der Aufbau deines Programms ist derselbe.
(es gibt nur feine Unterschiede bei den Compilern, da die sich nicht alle 100% an die ANSI-Norm halten)
 
Also von einer ANSI norm für C++ wüsst ich aber ;-)

C++ ist kein ansi standart. Einzig und alleine C ist ANSI standartisiert, und selbst da gibt es noch weitere standarts.

Aber solange du ANSI-C Programmierst wirst du außer eben mit den erwähnten APIs kaum probleme haben.

Und C++ ist auch zu einem großen teil standartisiert, allerdings erlaubt C++ gegenüber C einige ausnahmen bei der programmierung die nicht überall gleich standartisiert sind
hier ist z.B. die FOR schleife als gutes beispiel zu sehen

for(int i = 0; i < 100; i++) {}

Diese schleife ist in ANSI-C NICHT erlaubt. denn hier wird die variable in der schleifen definition deklariert. das erlaubt ANSI-C Aber nicht. C++ hingegen läst es zu, und damit gibt es ein problem.

nämlich gibt es compiler die annehmen das die deklaration zur schleife dazu gehöhrt. also so:
Code:
{
   int i = 0;
   while(i < 100) {
      {/* code hier*/}
      i++;
   }
}
es gibt aber auch welche die annehmen das es nicht zur schleife gehöhrt,
so:
Code:
int i = 0;
{ while(i < 100) {
   {/* code hier */ }
   i++;
}}

Nun das führt dann zu problemen wenn man mehrere schleifen untereinander hatt
Code:
for(int i = 0; i < 100; i++) {}
for(int i = 0; i < 200; i++) {}
die einen compiler, die die ich zuerst aufgeführt habe, werden diesen code problemlos abarbeiten, die andere sorte wird sich über doppelt definierte variablen beschweren. bei der 2. sorte muss es so aussehen
Code:
for(int i = 0; i < 100; i++) {}
for(     i = 0; i < 200; i++) {}
Man sieht schon das es da zu differenen kommen kann.

Das ist auf jedenfall ein wichtiger punkt der zu beachten ist wenn man für mehrere compiler programmiert...
entweder explizit die variable vor der schleife deklarieren wie es in ANSI-C pflicht ist.
Code:
int i;
for(i = 0; i < 100; i++) {}
oder die deklaration explizit in die schleife hinein zwingen, das geht so:
Code:
{ for(int i = 0; i < 100; i++) {}}
ds erinnert dann zwar n wenig an lisp aber immer noch besser als probleme mit dem compiler.
 
Zurück