ä -kirjain komentorivisovelluksissa JA main() -funktion voi uudelleenohjaus

Anonyymi

#include <stdio.h>

// Pienen "ä" -kirjaimen tulostus komentorivisovelluksissa:
// samalla esimerkki siitä, miten C -kielen main() -funktion voi uudelleenohjata mainwork() -funktioon.

typedef char * PAnsiChar;
typedef PAnsiChar * PPAnsiChar;

void printAE(void) {
printf("\x84"); // merkin "ä" koodi koodisivuilla 437 tai 850 on 0x84. (132)
// koodit sivulla 437: https://en.wikipedia.org/wiki/Code_page_437

}

int mainwork(int argc, PPAnsiChar argv) {

//

printf("Argumenttien lukum");
printAE(); printAE();
printf("r");
printAE();
printf(": %d", argc);

return 0;
}

int main(int argc, PPAnsiChar argv) {
return mainwork(argc, argv);
}

7

1497

    Vastaukset 7

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Anonyymi

      em. kirjoituksessa on ollut kyse NIMENOMAAN ohjelmoinnista Windowsille (linuxille on sitten omat juttunsa: nykylinuxeissa komentorivisovellusten merkkikoodaus on UTF-8 -enkoodattu UNICODE; vanhoissa linuxeissa kuten debian sarge, komentorivisovellusten merkkikoodaus on ISO-8859-1).

      Tietenkin em. koodia voisi muokata korvaamalla rivin:

      printf("\x84"); // merkin "ä" koodi koodisivuilla 437 tai 850 on 0x84. (132)

      esim. näin:

      #ifdef mswindows
      printf("\x84"); // merkin "ä" koodi koodisivuilla 437 tai 850 on 0x84. (132)
      #endif

      #ifdef old_linux
      printf("\xE4"); // merkin "ä" koodi koodisivuilla ISO 8859-1 on 0xE4. (228)
      #endif

      #ifdef new_linux
      printf("\xC3\xA4"); // merkin "ä" enkoodus esitystavalla UTF-8 on 0xC3 0xA4.

      // huom: "ä" enkoodattuna UTF-8 on siis 2- tavuinen: 0xC3 0xA4.

      #endif

      Lainaus:

      printf("\x84"); // merkin "ä" koodi koodisivuilla 437 tai 850 on 0x84. (132)

      Täsmennys:

      Tuossa linkatussa taulukossa (Web: Code page 437)

      ruudussa "ä" on seuraavat tiedot:

      ä = tulostuva merkki
      00E4 = vastaava UNICODE -koodi (joka EI OLE olennainen tässä asiassa; mainittu vain referenssinä)

      132 = merkin "ä" koodi koodisivulla 437 esitettynä 10 -järjestelmässä, eli vastaa heksadesimaalikoodia 0x84.

      Web -sivun ( https://en.cppreference.com/w/cpp/language/escape ) mukaan:

      Vastaavaa numeerista tapaa 10 -järjestelmän mukaan kirjoitetuille merkkikoodeille ei C -kielen standardissa ole, vaan voit valita joko heksadesimaalikoodin (suositeltava) tai vaihtoehtoisesti oktaalikoodin (käytä vain, jos on olemassa erityinen syy käyttää sitä heksadesimaalikoodin sijasta).

      Lainaus em. sivulta:

      Numeric escape sequences
      \nnn arbitrary octal value byte nnn
      \xnn arbitrary hexadecimal value byte nn

      Toivottavasti tämä tuo selkeyttä siihen, miten komentorivisovellus saadaan näyttämään myös "ä" -kirjain oikein.

      • Anonyymi

        Kysymys oikeasti kokeneille C -koodareille:

        Onko olemassa jokin keino, miten tämän voisi toteuttaa:


        int check_character_encoding(void) {

        int the_Encoding;

        // the_Encoding = ????

        return the_Encoding;
        }

        ylläolevan funktion pitäisi palauttaa:

        437, jos komentorivisovellusten koodisivu on 437
        850, jos komentorivisovellusten koodisivu on 850
        8859, jos komentorivisovellusten koodisivu on 8859-1
        65001, jos komentorivisovellusten koodisivu on UTF-8

        -1, jos ohjelma ei kykene automaattisesti tunnistamaan käytettyä komentorivisovellusten koodisivua.

        windowsin / linuxin voisi ehkä yrittää tunnistaa siitä, että jos printtaa merkkijonoon
        "\n", niin tuleeko 1 merkki (LF, linuxissa) vai 2 merkkiä (CR ja LF, windowsissa).

        kirjastoja (DLL / .so) voisi ladata vain dynaamisesti (windowsissa LoadLibrary),
        jos ei olla varmoja, mitä kirjastoja on saatavilla.


    • Anonyymi

      Ei ole kysymys mistään uudelleen ohjaamisesta, vaan tämä on komentoriviparametrin välitys esimerkki, joka näyttää kuinka komentoriviparametri välitetään C-ohjelmassa, ali-funktiolle.

    • Anonyymi

      Tuo on oikeastaan editorin ominaisuus ja käytetyn terminaalin/konsolin asetus. Kääntäjä ei tiedä mitään koodauksista sinänsä, mutta lukee lähdekoodia sisäänsä asetetussa koodauksessa.
      Esimerkiksi emacs:ssa voi kooditiedoston tallettaa utf-8 muodossa normaalisti, mutta jos on tarvetta iso-8859-1 koodaukselle, sen saa klikkaamalla esim. status-rivin U-kirjainta hiiren 2-napilla ja valitsemalla talletusformaatin. Tällä tavalla toimimalla saa tiedoston pidettyä myös siististi oikeassa formaatissa, koska editori osaa näyttää erikoismerkit/koodauksen oikein.
      Helpoin tapaus eli utf-8 terminaali, utf-8 kooditiedosto ja emacs utf-8 moodissa(oletus): Kaikki toimii oikein! Terminaalin asettaminen käännöksen jälkeen iso-8859-1:ksi kuitenkin rikkoo tällöin merkistön. Pitää siis saada tiedosto oikeaan formaatiin: M-x recode-region on oikea komento tähän emacsissa. Käännöksen jälkeen ääkköset eivät näy utf-8 terminaalissa (välttämättä) oikein, ennen kuin sen enkoodaus on myöskin vaihdettu.
      Ja jos lennossa tarvitsee eri koodauksia tukea, niin iconv on ainakin yksi työkalu tällaiseen.
      Pienenä anekdoottina: 20-vuotta sitten kirjoittamani tekstipohjainen ohjelma toimii yhä edelleen oikein, mutta tuotettu binääri tuottaa nykyään kääntäjällä oletuksena utf-8 koodausta, kun se aikaisemmin tuotti iso-8859-1:tä. Toisin sanoen, ohjelma ei ole muuttunut, mutta ympäristö on järjettömän erilainen, missä sitä ajetaan ja mahdollistaa vaikkapa japaninkieliset kirjoitusmerkit nykyään!

      • Anonyymi

        Kyllä sinä olet vainunnut asian ytimen oikein, mutta monisanaisuutesi vuoksi, asiaan jää epäily, ettet olisi ymmärtänyt kysymystä ollenkaan.

        Tämä sama ajatus, järjestelmän oletuksista yltää kaikkeen. Mikäli et Lazarus sovelluksessa erikseen määrittele sovelluksen taustaväriä, käytetään järjestelmän oletusta ja näin menetellen piirretään koko sovelluksen käyttöliittymä kuten myös käytetty koodisivu.

        Näitä yleisiä siirrettävyyteen liittyviä sääntöjä, GNOME rikkoo tahallisesti, jossa systemaattinen järjestys korvataan kaaoksen omaisella epäjärjestyksellä. Odottelen milloin ne päättää vaihtaa kirjaimien paikkaa keskenään, luodakseen jotain muista poikkeavaa.


    • Anonyymi

      Tuollaisia jutyujs: ;Master Bppt Record )MBR), paritition type is unknonwn propaplyy RAW an encodeded with some jokeu... Star Generator 2.0 :D

      • Anonyymi

        Kaikkien olemassa olevien ongelmiesi lisäksi, sinulla on pahoja sopeutumisvaikeuksia, eivätkö vanhempasi aio tehdä asialle mitään.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Venäjä alkaa iskemään Suomen politiikkaan.

      Tässä on valtion ja koko länsiliiton päämiehet varoitelleet, että Venäjä alkaa talven aikana taas iskemään hybridisesti.
      Sinkut
      236
      1449
    2. Hallituksen järjestämä spektaakkeli tuo vessanpyttykeissi

      Että olisi kymmenien kansanedustajien kodeissa käyty ihan tuosta vaan, eikä kukaan kansanedustaja kerro niin käyneen, va
      Maailman menoa
      280
      1031
    3. Miltä tuntuu vanhempi nainen olla

      Pihkassa huomattavasti nuorempaan kolliin joka on uskollinen ja kiltti ja tottelee joka asiaa ja tykkää pussailla ja pan
      Ikävä
      93
      791
    4. Sysmän "ilon päivä"

      Ja taas palaa hirveä määrä verorahoja, ihan turhaan soopaan. Eikö nämä jotka kuntapolitiikassa valittavat ja tuhoaa vaan
      Sysmä
      68
      772
    5. Uskon, että saataisiin kaikki selvitettyä

      Mutta yhteys on jäissä, minä olen jäässä, enkä osaa tai uskalla enää lähestyä. Se vaan on niin. Naiselta Jos ei ole hyvä
      Ikävä
      48
      713
    6. Pakko myöntää mies

      En mä aina ihan rehellinen sulle ollut
      Ikävä
      109
      609
    7. Joka ilta mietin

      sua❤️Mitä teet, missä meet? Kaipaatko yhtään? Yön tullen toivotan mielessäni sulle hyvää yötä ja aamuisin huomenet. Joka
      Ikävä
      27
      583
    8. Riitastako pelastaja

      Riitta jätti hakemuksen. Hyvä niin. On ainakin yksi mistä ottaa. Pertsa ei taida aikuistua koskaan ja Pekka hoiteli silt
      Kemijärvi
      34
      574
    9. Timo Vornanen.

      On siinäkin yksi täystampio. Eipä ihme, että persukannattajat sen eduskuntaan äänestikin.
      Maailman menoa
      46
      548
    10. Luottamus

      Luotan vain siihen mitä tapahtuu IRL. Anonyymipalstan vihjailut eivät merkitse minulle mitään.
      Ikävä
      94
      525
    11. mielikuva

      Mitä luulet hänen ajattelevan sinusta?
      Ikävä
      40
      481
    12. 31
      471
    13. Kadutko mies sitä miten reagoit?

      ..siihen sotkuun, jonka jälkeen mikään ei ole ollut kuin ennen. 🥺
      Ikävä
      47
      451
    14. Millaisen talvitakin haluaisit?

      Talveen vielä aikaa, mutta talvitakit tulleet kauppoihin. Millainen olisi unelmiesi talvitakki? Itse tykkäisin jostain
      Sinkut
      76
      446
    15. Olisitko nainen ihan nolona

      Jos et saisikaan sitä nousemaan...
      Sinkut
      77
      412
    16. Onko kahvila Retro samalla pub???

      Netin mukaan anniskeluoikeudet. Käykö tuolla kaljoitteluporukkaa? Onko iltaviihdettä? Olen muuttamassa marraskuussa Kuhm
      Kuhmo
      8
      407
    17. 30
      403
    18. Mikä kaivatullesi

      On tärkeintä elämässään?
      Ikävä
      27
      400
    19. Oletteko täyttä sataa?

      Muuta etunimienne kirjaimet numeroiksi. Esim. Mia ja Risto siitä tulee 8 numeroa. Laske ne yhteen . Paljonko tulee?
      Ikävä
      33
      390
    20. Iivari esittää poliisin tutkintaa

      Siikalatvan kunnanjohtaja Pekka Iivari on pannu ison pyörän liikkeelle. Entinen Kemijärven historian lyhimmän kaupunginj
      Kemijärvi
      21
      381
    Aihe