fv-ben fv

 ( Zahy | 2012. október 3., szerda - 11:32 )

Egy kerdest kaptam, es nem tudok valaszolni:

void f1() {
  void f2() {
    printf("ize\n");
    }
  f2();
  printf("ecet\n");
}

Ez valami nested fv nevu gcc bovitmeny. Letezik-e ez valamelyik ujabb C-szabvanyban? (Ha igen, akkor melyikben es mi ertelme van? )

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Azok után, amit ma láttam, már semmin sem csodálkozom.*

Anélkül, hogy valaha is használtam volna, ennek szerintem az az értelme, hogy az f2 fg-t az f1-en belül definiálod, a láthatósága csak az f1-re terjed, és a többi függvényből nem is tudod elérni. Hogy ez mennyiben javítja az olvashatóságot, a program átláthatóságát, azt mindenki döntse el maga ;)

* kivonatosan:

switch (state_in->step)
{
while (1)
{
case step_a:
case step_b:
case step_c:
case step_d:
}
}

--
http://www.open-st.eu

*-hoz: ez meg WTF????

A'rpi

hát ha tényleg ez szerepel, akkor érdekes refaktoringnak mondanám :-)

Itt látható eredeti formájában:

http://sourceforge.net/projects/libb64
cdecode.c
--
http://www.open-st.eu

azannya
Hogy precív legyek, egy do ciklust belehányni egy switch közepibe ilyetén módon, az valahogy nekem a perverzitás fogalomkörébe tartozik, és mint ilyen, valószínűleg sűrűn csuklana a mamája annak, aki nekem ilyen kódot rak az orrom alá. De ez persze csak annyit jelent, hogy lemaradtam elméleti programozás órán.

Ezért jó, ha valaki assembly-ből lép fel C-re!
Marha ronda, de zseniális.
> Sol omnibus lucet.

Vagy ezért nem jó, nézőpont kérdése. :)

BTW ez lehetett zseniális akkor, de manapság (ahogy a Wikipedia is említi) esetleg többet árt mint használ...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

link

a lathatosag cigany megoldasa :)

---
Egy jól megállapított probléma félig megoldott probléma.
- Charles Kettering

Hm, ez a lokális változókhoz való hozzáférés sokat segíthet. (Mármint később az ősz hajszálak számának növelésében.)

ugy tudom gcc specifikus, es raadasul kavaras van a stack-ben is miatta ami miatt ujabban kernel tamogatas is kell hozza

A'rpi

Win7 alatt Cygwinnel ment...
--
http://www.open-st.eu

Valszeg az az értelme, hogy az implementálással a világ nem tudja elfelejteni, hogy valaha is létezett Pascal nevű programnyelv, és annak "először jó ötletnek tűnt" fícsörei.

GCC only feature, és mint ilyen eleve kerülendő.

Értelmesnek tűnő felhasználási módja lehet, ha pl így definiálunk egy összehasonlító fv-t a qsort vagy bsearch meghívásához, de nem akarjuk, hogy ez máshonnan elérhető legyen.

Egyébként meg: http://en.wikipedia.org/wiki/Nested_function

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

"Értelmesnek tűnő felhasználási módja lehet, ha pl így definiálunk egy összehasonlító fv-t a qsort vagy bsearch meghívásához, de nem akarjuk, hogy ez máshonnan elérhető legyen."

Ennyi erővel támogathatnák az anonymous fv-eket is...

van hasonlo: apple blocks, snow leopard ota elerheto

megplusz az internal linkage (ld. static) pont erre való

Miért használna valaki C-t, amikor C++-it is használhat? Ahol van értelme a C-nek (linugz kernel, beágyazott rendszerek) ott könnyen lehet, hogy nem (csak) gcc-vel fogsz fordítani, akkor meg ez a fícsör használhatatlan, jobb nyelvekben meg van rá külön eszköz.
----
India delenda est.
Hülye pelikán

kernelt is lehet c++-ban irni

--
NetBSD - Simplicity is prerequisite for reliability

Ennek ellenkezőjét senki nem állította. LINUX kernelt viszont (amiről én beszéltem), bajos. Egyrészt mert nagyon C-s az egész, nem szívesen fogadja be a C++-t, másrészt Linus egy barom, és úgysem kerülne be soha mainlineba.
----
India delenda est.
Hülye pelikán