Új hozzászólás Aktív témák
-
Hiftu
senior tag
válasz
Hunmugli #3817 üzenetére
Elmondom, miért nem ajánlott ilyesmiröl még gondolkodni sem.
1, nem tudod lokálisan elemezni a függvényt. Egy csomó külsö függösége lenne.
2, a külsö függöségei gyakorlatilag láthatatlanok lennének.
3, mások számára olvashatatlan lenne a kód (a való életben ez fontos). Keresnék a változókat lokálisan, paraméterként, adattagként, globálisnak és sehol nem találnák. Ez bujócskának jó lenne, de szoftvernek rossz.
4, hála istennek a c++ nem enged meg ilyet.Megoldás: használj paramétert és minden rendben lesz.
-
Domonkos
addikt
válasz
Hunmugli #3817 üzenetére
Pointeres hackelessel tuti meg tudnad oldani - noha majdnem ugyanott lennel, ha egy pointert passzolgatnal/raknal egy kulso szkopba a valtozo helyett...
Egyeb ami eszembe jut, az a kulonbozo IPC megoldasok, mint peldaul az osztott memoria. Nem nagyo elegans, az olvashatosagon tuti ront es foloslegesen bonyolitja meg a dolgot, ha csak erre szeretned hasznalni, de mukodhet. -
válasz
Hunmugli #3817 üzenetére
"El tudok érni egy nemglobális változót egy függvényből anélkül, hogy benne hoznám létre, vagy hogy átadnám neki?"
Szerencsére nem.
( Illetve nyilván mindent meg lehet csinálni, pointerekkel pl. megoldható, de ahhoz azért elég jól kell tudni, hogy adott architektúrán az adott fordító mit csinál és pontosan hova kell célozni a stackben. Ja, meg persze feltétel, hogy az adott változó ténylegesen létezzen, mert a példádban a fordítók jó eséllyel kioptimalizálnák a szam változót )
-
mgoogyi
senior tag
válasz
Hunmugli #3797 üzenetére
"Baloldalt egy char van, jobboldalt egy bit, ez nem fog menni".
A char egy 8 bites szám és jobb oldalt nem bit van, hanem egy másik 8 bites szám, aminek jellemzően egy adott bitje tér el a többitől. Innentől pedig az alap bitműveletek kellenek (és,vagy,xor,negálás)
Amit csinálsz, azt szokták flageknek hívni, minden bitnek megvan a saját jelentése.Nem kell túlgondolni az elképzelést:
1101 & 0010 = 0000 (bit ellenőrzés)
1101 | 0010 = 1111 (bit beállítás)Gyakorold valamennyit papíron, lehet az segít abban, hogy lásd, hogy melyik művelet mire jó.
Pl. 1-es bittel éselés az adott bit értékét fogja kiköpni, 0-ással(1011) az adott bitet állítod garantáltan nullára.A flagekre visszatérve: ilyesmit szoktak csinálni, hogy:
Option1 = 1 (001)
Option2 = 2 (010)
Option3 = 4 (100)Options = 101 esetén az option 1 és 3 van bekapcsolva.
Bár lehet, hogy te pontosan erre akarod használni."C bitjei balról jobbra vannak számozva, 0tól kezdődően 7ig. Function szerűen kéne"
Szerintem jobbról balra számozd a biteket, akkor a természetes bitsorrendet kapod és a 001 = 1-et jelent majd decimálisan, az 100 meg 4-et pl.
A 0-ás indexű bit a 2^0-át jelenti, az 1-es a 2^1, stb.stb.Ha kérdésed van bitekkel kapcsolatban, akkor kérdezz(akár privátban is rámírhatsz), ezzel relatíve sok gyakorlatom van.
-
Domonkos
addikt
válasz
Hunmugli #3800 üzenetére
Ha masolsz kodot, akkor rapillanthatok hogy mi csuszhat felre.
BTW: elozo hozzaszolasomban irtam, hogy jol optimalizalva ez akar egyetlen muvelet is lehet. Nos nem.Ha
N
is parameter, akkor (a regiszterekbe masolgatassal egyutt) 4 utasitas lesz. Viszont annyi igaz, hogy ennel nem lesz mar nagyon optimalizaltabb megoldas. Az egy muveletet azt a megfelelo bit atbillentesere ertettem. -
Domonkos
addikt
válasz
Hunmugli #3797 üzenetére
Ha a leheto legegyszerubben akarnam megcsinalni, akkor valahogy igy tennem:
C N. bitjenek beallitasa:
C |= (1<<N);
Egyetlen bit torlese:
C &= ~(1<<N);
Egyetlen bit lekerdezese:
C & (1<<N);
Itt termeszetesen a legkisebb helyiertektol es 0-tol szamozodnak a bitek. Hogy hogy ontod osztalyba, mar rad bizom.
Meg par ellenorzessel is elferne.
Ha jol optimalizal a fordito, akkor ez a legtobb architecturan egy-egy utasitas lesz a binarisban. -
dobragab
addikt
válasz
Hunmugli #3779 üzenetére
C++ szabvány nem engedi meg, hogy ne legyen megadva a visszatérési érték. GCC 4.9 ezek szerint sz*rik rá, ahogy sok minden másra is. [link]
Nem definiált függvény csak akkor fordítási (linkelési) hiba, ha meg is hívod. Ezt gyakran kihasználjuk, pl. template metaprogramozásnál.
int func(int);
double func(char);
using T = decltype(func(1)); // T == int(#3777) EQMontoya
Jogos, erre nem gondoltam. Azt hittem, pointerként kéne kiírnia (
%p
lenne printf-nél), mert ugye függvénypointer.Ezek szerint a kiírásra nincs függvénypointer-overload (persze, C++98-ban nem lehetne megcsinálni, utána meg kompatibilitási okok miatt nem vezetnék be soha).
Fptr
->void*
konverzió pedig adatszegmens - utasításszegmens okok miatt nem implicit. Pedigvoid*
-os overload van. -
kispx
addikt
válasz
Hunmugli #3779 üzenetére
kiir:
A függvények alapértelmezett visszatérési típusa int. Emiatt nincs kiírva az int és tér vissza int-tel.Amíg nem hívod meg a beallit() metódust, addig nem mindegyik fordítónál hiba. Amit megakarod hívni, undefined reference to asd::beallit hibaüzenetet kapsz.
double a = 4.3
Default member initializer -
-
dobragab
addikt
válasz
Hunmugli #3771 üzenetére
Ha megnézed a fordító hibaüzenetét, közelebb kerülsz a megoldáshoz.
int x(int(int(int(int(int(int(int(int))))))));
Ez a sor nem egy változó, hanem egy függvény deklarációja.
int x(int (*)(int (*)(int (*)(int (*)(int (*)(int (*)(int (*)(int))))))))
Tehát egy inttel visszatérő függvény, [ami paraméterként egy inttel visszatérő függénypointert vesz át]...., ami paraméterként egy intet vesz át.
Utána, a kiírásnál a függvény automatikusan a címére konvertálódik (ami egy függvényre mutató pointer), az viszont bool-ra (nem tudom pontosan, miért). Ezért ír ki 1-et.
Függvénydeklarációnak viszont nem adhatsz értéket.
Nem véletlenül szokták mondani a C / C++ deklarációkra, hogy syntax only a compiler could love…
-
bandi0000
nagyúr
válasz
Hunmugli #3773 üzenetére
= az mindig értékadás
public:
valami (int a) : asd (a) { } //szoval ez mi?ezt én sem tudom
vagyis ha jól gondolom akkor lesz egy publikus változód a valami, ami kapna? egy intes értéket, bár azzal meg nem csinálsz semmit, szóval passz
mit szeretnél csinálni? mert azzal többre mennénk
-
-
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Formula-1
- Futás, futópályák
- Kuponkunyeráló
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- A fociról könnyedén, egy baráti társaságban
- sziku69: Szólánc.
- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- One otthoni szolgáltatások (TV, internet, telefon)
- sh4d0w: Ez van, srácok...
- További aktív témák...
- !Akció! Klipsch R-120SW Sub / Mélynyomó
- BMW gyári alufelni, téli gumival
- iPad Air 5th gen (2022) 11" Blue M1 Cellular, ESR Rebound Hybrid Case 360 tok, 5in1 Type-C Hub
- AKCIÓ!!! Új SONOS ACE - Dolby Atmos vezetéknélküli fejhallgató, dupla BT, Sonos rendszer nélkül is m
- ÚJ iPhone 16 Pro Max 256GB Black Titanium (1 év Apple Care+)
- BESZÁMÍTÁS! MSI X370 R5 2600 16GB DDR4 512GB SSD GTX 970 4GB Zalman Z9 Neo FSP 600W
- Bomba ár! Lenovo ThinkPad L580 - i5-8GEN I 16GB I 256GB SSD I 15,6" FHD I Cam I W11 I Garancia!
- Bomba ár! Lenovo ThinkPad T14s G2 AL - i7-1185G7 I 16GB I 1TSSD I 14" FHD Touch I W11 I Cam I Gari!
- Olcsó Notebook! Dell Latitude E7280! I5 7300U / 8GB DDR4 / 256GB SSD!
- HIBÁTLAN iPhone 14 128GB Blue -1 ÉV GARANCIA - Kártyafüggetlen, MS3017, 100% Akkumulátor
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: NetGo.hu Kft.
Város: Gödöllő