amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Gibt es ein Standard-#define für Amiga-Systeme? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

01.01.2013, 21:04 Uhr

Reth
Posts: 1750
Nutzer
Hallo zusammen und ein gutes neues Jahr wünsche ich!

Sorry für die hoffentlich nicht zu blöde Frage, aber gibt es so etwas im Vgl. zu Windows oder Linux:
C code:
#if defined (_WIN32)
#if defined __linux

?

Habe schon von
C code:
#if defined AMIGA

gelesen, weiss aber nicht, ob das immer und überall trägt.
Oder muss man sich so ein Define immer selbst im makefile setzen?

Danke schon mal für ne kurze Info.

(Hm, irgendwie wird bei mir der Text nach dem ersten Codeblock in der Vorschau so klein angezeigt wie die Überschrift "C code:". Ist da was mit der Forensoftware passiert, oder gehts nur mir so?)

Ciao

[ Dieser Beitrag wurde von Reth am 01.01.2013 um 21:04 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

01.01.2013, 23:35 Uhr

jolo
Posts: 107
Nutzer
Nee, leider nicht, obschon unter GNU-C bei meiner Installation (gcc 3.4.0 mit dem SDK 3) es gesetzt ist. Hier mal ein Beispiel wie ich es machen würde.

Für 'gcc' müsstest Du mal nachschlagen, welches Makro die Prozessorfamilie spezifiziert. Habe hier mal aus den Kopf zur Sicherheit alle genommen, die ich für m68k kenne.

code:
#if defined (__amigaos4__) || defined(__MORPHOS__) || defined(__AROS__)
 #define AMIGA
#else
 #if defined(__VBCC__) && defined(__M68K__)
  #define AMIGA
 #else
  #if defined(__GNUC__) && (defined(_M68000) || defined(__M68000) || defined(__mc68000))
   #undef AMIGA
   #define AMIGA
  #else
   #if  defined(__SASC) || defined(__MAXON__) || defined(__DCC)
    #define AMIGA
   #endif
  #endif
 #endif
#endif

#include <stdio.h>
#include <string.h>

int main( int argc, char **argv)
{
	#if defined(AMIGA)
	puts( "Running on an Amiga (alike) host.");
	#else
	puts( "Running on a non AMIGA (alike) host.");
	#endif
}


Für 'gcc' reichen solche Tests aber nicht auch; gibt ja auch Debian und NetBSD die unter m68k Prozessoren laufen. Da musst Du dann von Anfang an das Ausschlussverfahren anwenden...


Grüße


--
Stupid mistakes are always made by others -
we only make unavoidable errors

[ - Antworten - Zitieren - Direktlink - ]

02.01.2013, 16:13 Uhr

Thore
Posts: 2266
Nutzer
Du hast StormC vergessen ;)

Aber es stimmt schon, meist reicht ein
C++ code:
#if defined(__amigaos4__) || defined(__MORPHOS__) || defined(__AROS__)

durchaus aus. Und ein define das alles beinhaltet zu deklarieren ist sicher nicht verkehrt.
Kommt eben auch drauf an, für welche Systeme du compilieren willst.

[ - Antworten - Zitieren - Direktlink - ]

08.01.2013, 10:18 Uhr

gni
Posts: 1106
Nutzer
Zitat:
jolo:
Nee, leider nicht, obschon unter GNU-C bei meiner Installation (gcc 3.4.0 mit dem SDK 3) es gesetzt ist.

Ich denke mal, das der AmigOS-Port des GCC immer ein eingebautes #define für AMIGA haben wird, alleine um SAS/C kompatibel zu sein bzw. zu bleiben. Ein weiteres Kompatibilitätsdefine ist MCH_AMIGA, das stammt noch von Aztec-C.
FWIW, die angesprochene GCC Portierung hat vor sehr langer Zeit ein anderes Symbol als neues Standardefine eingeführt: __amigaos__ - später wurde das dann für OS4 abgewandelt ;) Ach ja das #define __amiga__ gibt es beim GCC auch.

BTW, bitte die Unterstriche beachten! Die Symbole ohne Unterstriche sind nicht immer definiert!
Zitat:
Hier mal ein Beispiel wie ich es machen würde.
IMHO ist der vorgeschlangene Ansatz keine gute Idee, da AMIGA hier u.U. einfach überdefiniert wird (edit: beim GCC hast Du es vorher entfernt ;). Sowas sollte immer unterbleiben. Also entweder vorher ein #undef oder vermutlich besser #ifndef AMIGA verwenden.
Zitat:
code:
#if defined (__amigaos4__) || defined(__MORPHOS__) || defined(__AROS__)


Hier würde ich defined (__amigaos__) ergänzen.
Zitat:
code:
#if defined(__VBCC__) && defined(__M68K__)
  #define AMIGA


Laut Doku und config hat VBCC wirklich kein OS #define.
Zitat:
code:
#if defined(__GNUC__) && (defined(_M68000) || defined(__M68000) || defined(__mc68000))
   #undef AMIGA
   #define AMIGA


Das kann komplett raus.
Im übrigen kennt der GCC "nur" mc68000 (mit doppelten Unterstrichen davor und dahinter bzw nur davor) und Varianten für mc680x0 mit x=2,3,4,6. Seit 4.3 gibt es auch x=1.
Die M68000 Symbole sind von SAS/C bzw von VBCC.
Zitat:
code:
#if  defined(__SASC) || defined(__MAXON__) || defined(__DCC)
    #define AMIGA
   #endif


Der SAS/C Test kann entfallen. Maxon und Dice kenn ich nicht (gut genug).

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Gibt es ein Standard-#define für Amiga-Systeme? [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1997-2019 by amiga-news.de - alle Rechte vorbehalten.
.