C/C++

C enum kérdés

Fórumok

Szabad egy enum konstans értékenek megadásakor ugyanabban az enum-ban korábban definiált konstanst használni? Buta példa:

enum foo {
        ONE = 1,
        TWO = ONE + ONE  /* szabad ilyet? */
};

Az a gyanúm, hogy szabad, de teljesen elbizonytalanítottam magam. Mindenesetre

gcc -ansi -pedantic

örömmel lefordítja.

A vonatkozó specben azonban nem látok semmi olyat, ami ezt explicit engedné, vagy amibe legalább bele tudnám magyarázni.
http://c0x.coding-guidelines.com/6.7.2.2.html

c++ closed source *.so + *.h virtual

Fórumok

Sziasztok!

Kovetkezo a kerdes: adott egy zart forrasu konyvtar (libWhatever.so), es hozza egy TyWhatever.h nevu header, amiben vannak effele deklaraciok:


namespace dzs
 {   class TyWhatever
      {   public:
              virtual int Valami(int ize) = 0;
              virtual int Bigyo(int akarmi) = 0;
      };
 }

Nomost, a libWhatever.so-ban vannak szimolumok, konkretan ilyesmik hogy dzs::CsWhatever::Valami(int) meg dzs::CsWhatever::Bigyo(int). Szoval ebbol az kovetkezik hogy a CsWhatever peldanyara van valojaban szuksegem, amik implementaljak a TyWhatever osztaly virtualis metodusait. Ez igy teljesen jol hangzik elsore. Annyira nem vagyok napi szintu kapcsolatban a c++ virtual-jainak a viselt dolgaival, de az onmagaban nyilvan keves ha valami ilyesmi kiterjesztest beadok meg kezzel az include "TyWhatever.h" utan, hogy


namespace dzs
{
 class CsWhatever: public TyWhatever { };
}

Valami ilyesmit hianyol a gomberzekem hogy `extern dzs::CsWhatever ...;`, de igy hirtelen nem latom, hogy. A dolog szepsege ugye hogy a *.h fileokban semmi utalas nincs a dzs::CsWhatever:: szimbolumokra.

Barmi otlet amivel lehet(ne) workaroundot csinalni erre?

thx, A.

Különböző struct átadása függvénynek

Fórumok

Pár napja próbálok rájönni az optimális megoldásra, lehet alapjában rossz felé keresek, így az alap problémámat is leírom és azt is, hogy én mire gondoltam mint megoldás. Viszont annak a megvalósításánál gondba ütközök.

EEPROM-ba szeretnék menteni konfigurációs adatot, paramétereket, válozókat. Célszerű ezt laponként kezelni és egyben kiírni akár. Ha változónként teszem akkor is hasonló lenne a helyzet.
A lap mérete 64 byte.
Az egyes lapokat struct-ba próbálnám rendezni, így a program futási ideje alatt a változók elérhetőek lennének. Emellett tudnám tárolni a lap kezdőcímét.
Kb. valahogy így:
typedef struct {
unsigned char page;
char ssid[32];
char psk[32];
} eewifi;

typedef struct {
unsigned char page;
char temp1;
char temp2[2];
long temp3;
} eetemp;

eewifi page_wifi1;
eewifi page_wifi2;
eetemp page_temp;

Nem egyforma méretűek, a szervezési viszont mindegyiknek azonos, az elején van egy cím, utána az adatok (max 64byte).
Szeretném 1 függvénnyel kezelni az eewifi, eetemp típusokat.
Pl. írni egy olyan függvényt ami kiírja a benne tárolt összes adatot, tehát eewifi-nél a címét és 64 byte-ot az eetemp-nél pedig a címét és 7 byte-ot.

A végső cél, hogy az egyes lapokat amiket struct-ba szerveztem kiolvasó és beíró függvénnyel kezeljem. A későbbiekben ne kelljen mindegyik struct-ra egyedit írni.

Próbáltam a pointerek világában elmerülni, de eddig vagy már fordítási hibába került, vagy pedig nem azt adta vissza amit vártam volna.

Ilyen dolgokat mikrovezérlőn ASM-ben megírtam amit akartam, persze vigyázva arra, hogy ne írjak felül semmit, onnan olvassak ahonnan kell, stb... Most viszont x86-on próbálnám előbb, hogy működik-e az elgondolás majd később ESP32-re menne a program.

Szívesen veszek bármilyen iránymutatást, vagy akár egy működő programrészt ami kiírja bármelyik struct tartalmát, ahogy fentebb vázoltam.

[-Wformat-overflow=]

Fórumok

Arra szeretném rávenni a programot, hogy tegyen be egy stringbe egy 2 hosszú, előnullázott számot. Tudok róla, hogy a végére odapöttyint egy '\0'-át és fel is használom ezt a dolgot a továbbiakban.

A fordító dobja nekem ezt a warningot, mondja is milyen flaggel tudom ezt felülírni, de én szeretném megtartani a -Wall ficsört, mert ezt olyan megnyugtató. Meg lehet ezt a problémát kerülni valahogyan?

/meditor/2010/include/meditor.c:158:25: warning: '%02d' directive writing between 2 and 11 bytes into a region of size 10 [-Wformat-overflow=]

sprintf(ShortDateStr,"%02d",DaTi->tm_year-100);sprintf(&ShortDateStr[3],"%02d",DaTi->tm_mon+1);sprintf(&ShortDateStr[6],"%02d",DaTi->tm_mday);

Köszi a válaszokat előre is.

Nagyon light XML generator ANSI C-ben

Fórumok

Sziasztok!

Ugy adodott h kellene gyartanom egy Soap szerviz fele postolo embedded nagyon pici appot.
Tekintve h egy kvazi statikus XML-t kell eloallitani, 1 db string valtozoval, valami nagyon lightos xml generatort keresek, hogy ne most kelljen ennyire visszarazodni a C-be :)
Tud valaki ajanlani valamit ami mondjuk 1db c file es kepes egy xmlt letrehozni?

Koszi!

Zoli

Fordítás Ubuntu Linux-on (Cmake, Travis .. )

Fórumok

Sziasztok!

Tudnátok kérlek segíteni, hogy miképp tudnék C++ projekteket Ubuntu Linux-on könnyen fordítani?
Hallottam már a CMake-ről, illetve a TravisCI-ról is, de az én tudatomban még a './configure && make && make install' van .

Milyen fordítók vannak Linuxra? GCC, clang++? Mind ugyanazt tudja?
CMake mire való? Könnyű használni? C++ projektet lehet debug-ban soronként is futtatni?
IDE kell a fordításhoz, hogy terminálban a legkönnyebb?
Makefile és EMakefile között mik a különbségek?
Cpp, hpp fájlok micsodák? Melyik a 'main' . cpp ahonnan indul a program?
Függőségeket hogyan tudom feltérképezni, és telepíteni?

Példaképpen ilyen C++ programot szeretnék fordítani :
https://github.com/OpenFodder/openfodder/tree/master/Source

Előre is köszönöm!

[Megoldva] FTDI chip programozás (Win vs Linux)

Fórumok

Sziasztok!

Adott egy ilyen kis FTDI eszköz.

Ehhez szeretnék írni egy progit C-ben.
Kezdeti lépésnek csak egy egyszerű adatküldést valósítottam meg egy minta kód alapján.
Forráskód

Ezt a kis progit Windows 10 alatt szeretném használni. Viszont ha lefuttatom, akkor azt írja:
unable to open ftdi device: -4 (usb_open() failed)

Viszont! Szintén ezen a gépen lévő VirtualBoxban futó Ubuntun lefordítva és futtatva ugyanezt a kódot, tökéletesen működik a dolog.
Tud vele kommunikálni és a küldött adat is megjön.

Google nem nagyon barát, mert minden amit találok az Linux-os kérdés a témával kapcsolatban, nekem viszont ott semmi gond vele :)

Van esetleg ötletetek mi lehet a nyűg Win alatt?

"C is a lie"?

Fórumok

A BSD Now 244. száma/adása "C is a lie" címmel idéz egy cikket az ACMQueue-ból, miszerint "a C nem egy alacsonyszintű programozási nyelv", merthogy a mai számítógépek nem holmi "gyors PDP-11-esek".

Mivel nem tanultam műszaki területen, így a cikkben található részletek többsége nem igazán érthető számomra, de azt a részt még nagyjából érteni vélem, hogy a mai processzorok már nem olyan absztrakt gép-modellt kínálnak, mint a PDP-11, amikor még igaz volt az, hogy a C hardver-modellje elég jól fedte a PDP-11 felépítését. Viszont ha igaz, amit a cikkben állítanak, akkor hazugság, de minimum tévedés lenne az, amikor a mai C-programozós könyvek és blogok azt állítják, hogy azért is jó C-t tanulni, mert akkor tudni fogod, hogy mikor mi történik (majdnem) gépi szinten? Azért ez elég komoly kijelentés.

Fel tudtok világosítani? Valóban "hazugság a C" (ebben az értelemben)?

Leading underscore használata C++ azonosítókban

Fórumok

Egy nagy múltú Budapesti Egyetem nagy múltú képzésén azt tanítják a hallgatóknak, hogy C++-ban az a konvenció, hogy az osztályok privát mezőinek nevét leading underscore-ral kell kezdeni.

class X {
   private: 
           int _mezo1;
           int _mezo2;
}

Szerintem ez egy nagyon rossz gyakorlat C-ben és C++-ban, mivel általában az underscore-ral kezdődő szimbólumok a standard library és a compiler "érdekkörébe" tartoznak.

A CPP Reference szerint valóban így van az esetek nagy többségében: http://en.cppreference.com/w/cpp/language/identifiers

Lehet arról vitatkozni, hogy konkrétan ez az eset nincs reservednek jelölve, de az egy mindenképpen rossz gyakorlat szerintem, ha reserved-nek kinéző szimbólumot használunk a kódunkban normál adattagként.

Mi a véleményetek?

Kérem, hogy ne offoljuk szét a topicot azzal, hogy a $másik nyelvben az underscore konvenció, én is tudom, hogy vannak ilyenek. Itt most a C és C++ -ról van szó.

MSVC Conforms to the C++ Standard

Fórumok

The MSVC compiler toolset in Visual Studio version 15.7 conforms with the C++ Standard!

https://blogs.msdn.microsoft.com/vcblog/2018/05/07/announcing-msvc-conforms-to-the-c-standard/

Achieving conformance with the C++ Standards has been a long road for the Visual C++ team. If you’ve seen us at any conferences lately, you’ve probably seen the MSVC Conformance slide. (You can grab a copy of the slide or watch the 2017 CppCon talk here.) Finishing the features on this slide – which includes features from C++11, C++14, and C++17 – has been one of our team’s main goals for the past few years.