Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Makros: Ersetzen von bereits vorhandenem Code möglich?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.09.2006, 18:11 Uhr
Yadgar



High!

Da Windows und Linux (zumindest auf meinem privaten System) deutsche Sonderzeichen unterschiedlich interpretieren, würde ich gerne ein Makro schreiben, das im Falle einer gesetzten Variable WINDOWS diese Zeichen in String-Literalen ersetzt:

ä -> " << (char)132 << "
ö -> " << (char)148 << "
ü -> " << (char)129 << "

usw.

Leider wird mir weder bei Aupperle noch bei Breymann verraten, ob und wie dies möglich ist.

Unter Codesubstition wird dort verstanden, dass man ein Makro definiert und diesem dann ein Code-Stück zuweist, das im Quelltext dann jeweils an die Stelle des Makros tritt - String-Literale sind aber leider davon ausdrücklich ausgenommen...

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.09.2006, 18:44 Uhr
xXx
Devil



C++:
#if (defined _WIN32) // oder #ifdef
    #define ae ((char)(132))
#else // ! defined _WIN32
    #define ae ä
#endif // _WIN32

oder was willst du haben?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.09.2006, 18:56 Uhr
Blubber2063



Nö, das bringt ihm ja nix, was er will ist ne Ersetzung in strings, die werden aber eigentlich wie er schon richtig bemerkt hat vom Präprozessor nicht angeschaut. Was er sucht gibts nicht so richtig, aber du könntest ja auch einfach das Charset unter Windows und Linux angleichen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.09.2006, 19:08 Uhr
Yadgar



High!


Zitat von xXx:

C++:
#if (defined _WIN32) // oder #ifdef
    #define ae ((char)(132))
#else // ! defined _WIN32
    #define ae ä
#endif // _WIN32

oder was willst du haben?


So ähnlich:

Standardmäßig (also unter Linux) würde der Code z. B. lauten:


C++:
cout << "Konstruktor ausgeführt" << endl;



sobald aber _WIN32 definiert ist, stattdessen:


C++:
cout << "Konstruktor ausgef" << (char)129 << "hrt!" << endl;



ü würde also unmittelbar durch " << (char)129 << " ersetzt werden, ohne den sonst üblichen Umweg über einen Makro-Bezeichner!

Ist so etwas überhaupt möglich, oder bleibt mir nicht anderes übrig, als den Weg der konventionellen Codesubstitution zu wählen, also etwa:


C++:
#define _WIN32

#ifdef _WIN32
  #define ae (char)132
  #define oe (char)148
  #define ue (char)129
  #define ss (char)225
  /* weitere Makros für Ä, Ö und Ü */
#else
  #define ae "ä"
  #define oe "ö"
  #define ue "ü"
  #define ss "ß"
  /* weitere Makros für Ä, Ö und Ü */
#endif



so dass im Code dann stehen müsste:


C++:
cout << "Konstruktor ausgef" << ue << "hrt!" << endl;


?

Bis bald im Khyberspace!

Yadgar

Now playing: Ein Träumchen am Fenster (Asmus Tietchens)
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.09.2006, 19:10 Uhr
Yadgar



High!


Zitat von Blubber2063:
Was er sucht gibts nicht so richtig, aber du könntest ja auch einfach das Charset unter Windows und Linux angleichen.


Tja, wenn ich wüsste, wie DAS geht...

Bis bald im Khyberspace!

Yadgar

Now playing: Indigo (Blonker)
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.09.2006, 22:58 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Also - Windowskonsole benutzt sogenannten OEM-Zeichensatz gegenüber die normalen Windowsprogramme benutzen Ansi.

Zum Umwandeln gibts Ansi2Oem bzw Oem2Ansi (bzw statt 2 ein To)

Was am einfachsten ist wenn du auf der sicheren Seite sein willst - schreib dir ein kleines Programm das *.cpp,*.h,*.c Dateien im Arbeitsverzeichnis öffnet und den Inhalt durch Ansi2Oem jagt und ggf wieder abspeichert. Das lässt du dann von deinem Windowscompiler vor dem Build ausführen -> voila: Umlaute werden korrekt dargestellt.

Oder:

du setzt in deiner Anwendung mit SetConsoleOutputCP/SetConsoleCP die Codepage auf eine ANSI-codepage - das sollte auch helfen (oder halt keine Windowskonsole zu verwenden :P)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
26.09.2006, 14:08 Uhr
virtual
Sexiest Bit alive
(Operator)


Du solltestüber eine Sourceverwaltung wie CVS oder subversion nachdenken. Diese kann man so konfigurieren, daß die Umlaute immer korrekt für die jeweilige Platform umgesetzt werden.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
27.09.2006, 12:27 Uhr
Yadgar



High!


Zitat von FloSoft:

Zum Umwandeln gibts Ansi2Oem bzw Oem2Ansi (bzw statt 2 ein To)



Äh... wo denn?

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: