Új hozzászólás Aktív témák
-
Livius
őstag
válasz
buherton #6163 üzenetére
Ez a coding style vagy coding rules az NI LabWindows CVI-ban programozott GUI-s projekthez kell (rémisztően csak C-ben lehet használni ezt a GUI-s frameworköt). Én eddig a neten mindenhol azt olvasom és azt tanították nekem, hogy a globális változó egy nagy programban már szigorúan kerülendő (itt már nem 8 bites microcontroller a cél HW), jelenleg ahova kellene az már egy nagy program, tele káosszal már sajnos. Valamint ELTE IK C/C++ gyakorlaton instant évismétlés járt a go to és continue használatért, és értettem hogy miért, miután egyszer valaha valami tele go to-zott programot kellett debugolnom, és visszafejtenem. Fenntarthatatlan és karbantarthatatlan lesz a program tőle.
Az Ericsson-os codechekker az Windwos 10-en is életre kelthető? Ez a CVI fordító és IDE csak Windows 10-en megy, ebben megy a napi munka.
[ Szerkesztve ]
Gigabyte GA-Z170-D3H, Intel Core i7-7700K, Corsair Vengeance 2x4GB DDR4-3000MHz, Intel 545s 256GB SSD, EVGA GeForce GTX 1060 GAMING 6GB
-
dabadab
titán
Valamint ELTE IK C/C++ gyakorlaton instant évismétlés járt a go to és continue használatért, és értettem hogy miért, miután egyszer valaha valami tele go to-zott programot kellett debugolnom, és visszafejtenem. Fenntarthatatlan és karbantarthatatlan lesz a program tőle.
A hülyén használt gototól. Ez pont olyan, mint amikor idióta magyartanárok előveszik a "macska fel van mászva a fára" mondatot, hogy ezzel szemléltessék, hogy magyarban miért nem szabad szenvedő szerkezetet használni - csak hát valójában a magyarban a szenvedő szerkezet teljesen rendben van, a macskás példával az a gond, hogy pont azt semmilyen nyelven sem mondják szenvedőben, mert az úgy hülyeség (angolul se mondaná senki, hogy "the cat is on the tree climbed").
A jól használt goto a C-ben az a jól olvasható kódhoz sok esetben gyakorlatilag elkerülhetetlen. Tipikus példája az, amikor egy függvény több helyen érhet véget, de mindenképpen fel kell szabadítani resource-oket. Ezt mondjuk C++-ban tök faszán lehet csinálni RAII-vel meg finallyvel C#-ban, de azok tök más nyelvek. C-ben nincs ilyen, ott vagy minden helyre külön odakopipészteled a felszabadítást, vagy mindenhonnan a végére gotozol. Egyértelmű, hogy az utóbbi megoldás az, ami olvashatóbb és ami kevesebb hibalehetőséggel jár.
A C az gyakorlatilag hordozható assembler, ennek megfelelően kell hozzáállni, aki ott azt mondaná, hogy a JMP használatát el kell kerülni, azt kiröhögnék.
DRM is theft
-
Livius
őstag
válasz
dabadab #6165 üzenetére
A mi C-ben írt CVI projektünkben egyelőre még ez a +10 év alatt jól volt kezelve az ilyen, hogy nincs szükség sehol calloc vagy malloc-ra és azok felszabadítására, tehát amit írsz példát nincs szükségünk rá nagyon, de ettől független láttam már benne go to-t olyan helyen, ahol csak a megértést nehezítette, de azt amit írsz előnyt semmit sem adott.
Gigabyte GA-Z170-D3H, Intel Core i7-7700K, Corsair Vengeance 2x4GB DDR4-3000MHz, Intel 545s 256GB SSD, EVGA GeForce GTX 1060 GAMING 6GB
-
pmonitor
tag
válasz
dabadab #6165 üzenetére
> vagy minden helyre külön odakopipészteled a felszabadítást, vagy mindenhonnan a végére gotozol.
Mindenképpen mindenhová kell kopipésztelned vagy a gotot, vagy a felszabadítást. De sztem. ha ilyenre sor kerül a gyakorlatban, ott nem jól tervezték meg a logikai hálózatot. Biztos vagyok benne, hogy a megfelelő if-ek megválasztásával ha nem is teljesen, de nagyon nagy mértékben megszüntethető a sok helyről történő kilépés a függvényből. Max. 2 helyre nyugodtan lehet kopizni a felszabadítást is. De az is lehet, hogy megfelelő szervezéssel még a 2 helyet is le lehet redukálni egyre(de erre a fejemet nem teszem).
https://www.bferi.hu/download.php ; https://bferi.hu/egyeb.php
-
dabadab
titán
válasz
pmonitor #6168 üzenetére
Akkor tessék, demonstráld:
static int kvm_vcpu_check_block(struct kvm_vcpu *vcpu)
{
int ret = -EINTR;
int idx = srcu_read_lock(&vcpu->kvm->srcu);
if (kvm_arch_vcpu_runnable(vcpu)) {
kvm_make_request(KVM_REQ_UNHALT, vcpu);
goto out;
}
if (kvm_cpu_has_pending_timer(vcpu))
goto out;
if (signal_pending(current))
goto out;
ret = 0;
out:
srcu_read_unlock(&vcpu->kvm->srcu, idx);
return ret;
}DRM is theft
-
pmonitor
tag
válasz
dabadab #6169 üzenetére
Ha minden igaz így hirtelen:
static int kvm_vcpu_check_block(struct kvm_vcpu *vcpu)
{
int ret = -EINTR;
int idx = srcu_read_lock(&vcpu->kvm->srcu);
if (kvm_arch_vcpu_runnable(vcpu)) {
kvm_make_request(KVM_REQ_UNHALT, vcpu);
srcu_read_unlock(&vcpu->kvm->srcu, idx);
return ret;
}
if (kvm_cpu_has_pending_timer(vcpu) || signal_pending(current)) {
srcu_read_unlock(&vcpu->kvm->srcu, idx);
return ret;
}
ret = 0;
srcu_read_unlock(&vcpu->kvm->srcu, idx);
return ret;
}[ Szerkesztve ]
https://www.bferi.hu/download.php ; https://bferi.hu/egyeb.php
-
Livius
őstag
válasz
dabadab #6169 üzenetére
Én ilyenkor inkább így szoktam:
static int kvm_vcpu_check_block(struct kvm_vcpu *vcpu)
{
int ret = 0;
int idx = srcu_read_lock(&vcpu->kvm->srcu);
if (kvm_arch_vcpu_runnable(vcpu)) {
kvm_make_request(KVM_REQ_UNHALT, vcpu);
ret = -EINTR;
}
if (kvm_cpu_has_pending_timer(vcpu))
{
ret = -EINTR;
}
if (signal_pending(current))
{
ret = -EINTR;
}
srcu_read_unlock(&vcpu->kvm->srcu, idx);
return ret;
}Persze ekkor az nincs lekezelve, hogy a többi if-et kihagyja a returnbe érés előtt, ez kérdés szabad-e ebben a Linux driverben.
[ Szerkesztve ]
Gigabyte GA-Z170-D3H, Intel Core i7-7700K, Corsair Vengeance 2x4GB DDR4-3000MHz, Intel 545s 256GB SSD, EVGA GeForce GTX 1060 GAMING 6GB
-
pmonitor
tag
válasz
dabadab #6171 üzenetére
De sztem ki lehet az ilyeneket szervezni az ilyent külön függvénybe, és akkor tovább egyszerűsíthető. Azért a gyakorlatban ilyen nem nagyon fordul elő. A papír(vagy a monitor
) mindent elbír.
Szerk.: ja látom Livius gyorsabb volt. Mondtam, hogy csak szervezés kérdése. Csak nem én szerveztem jól.
[ Szerkesztve ]
https://www.bferi.hu/download.php ; https://bferi.hu/egyeb.php
-
nevemfel
aktív tag
Én is így okoskodtam:
static int kvm_vcpu_check_block(struct kvm_vcpu *vcpu)
{
int ret = 0;
int idx = srcu_read_lock(&vcpu->kvm->srcu);
if (kvm_arch_vcpu_runnable(vcpu)) {
kvm_make_request(KVM_REQ_UNHALT, vcpu);
ret = -EINTR;
}
if (kvm_cpu_has_pending_timer(vcpu) || signal_pending(current)) {
ret = -EINTR;
}
srcu_read_unlock(&vcpu->kvm->srcu, idx);
return ret;
}
(ez a kódformázás, ehh...)
[ Szerkesztve ]
A létező szocializmus idején az a mondás járta, hogy az értelmiség előtt két út áll: Az egyik az alkoholizmus, a másik járhatatlan.
-
dabadab
titán
Ezzel (meg nevemfel megoldásával) elég nyilvánvalóan az a gond, hogy olyan függvényeket is meghívsz, amiket nem kellene (szabadna) és a kód azt mondja, hogy az, hogy h a vcpu nem runnable, az még tök oké, mert attól még csinálhatunk itt dolgokat, noha ennek pont az ellenkezője a helyzet.
[ Szerkesztve ]
DRM is theft
-
pmonitor
tag
válasz
dabadab #6175 üzenetére
Így?
static int kvm_vcpu_check_block(struct kvm_vcpu* vcpu)
{
int ret = 0;
int idx = srcu_read_lock(&vcpu->kvm->srcu);
int ex = 0;
if (kvm_arch_vcpu_runnable(vcpu)) {
kvm_make_request(KVM_REQ_UNHALT, vcpu);
ret = -EINTR;
ex = 1;
}
if (!ex && kvm_cpu_has_pending_timer(vcpu))
{
ret = -EINTR;
ex = 1;
}
if (!ex && signal_pending(current))
{
ret = -EINTR;
}
srcu_read_unlock(&vcpu->kvm->srcu, idx);
return ret;
}https://www.bferi.hu/download.php ; https://bferi.hu/egyeb.php
-
nevemfel
aktív tag
válasz
dabadab #6178 üzenetére
Ez se okés így? :
static int kvm_vcpu_check_block(struct kvm_vcpu *vcpu)
{
int ret = 0;
int idx = srcu_read_lock(&vcpu->kvm->srcu);
if (kvm_arch_vcpu_runnable(vcpu)) {
kvm_make_request(KVM_REQ_UNHALT, vcpu);
ret = -EINTR;
} else if (kvm_cpu_has_pending_timer(vcpu)) {
ret = -EINTR;
} else if (signal_pending(current)) {
ret = -EINTR;
}
srcu_read_unlock(&vcpu->kvm->srcu, idx);
return ret;
}[ Szerkesztve ]
A létező szocializmus idején az a mondás járta, hogy az értelmiség előtt két út áll: Az egyik az alkoholizmus, a másik járhatatlan.
-
pmonitor
tag
válasz
nevemfel #6179 üzenetére
Én is gondoltam erre. Csak az a baj vele sztem. hogy feltételezi, hogy ha az előző feltételbe belemegy, akkor annak mindenképpen kilépés lesz a vége. Bár a konkrét példában ez a helyzet. De még azon belül is lehetnek if-ek.
[ Szerkesztve ]
https://www.bferi.hu/download.php ; https://bferi.hu/egyeb.php
-
dabadab
titán
válasz
nevemfel #6179 üzenetére
Ez egészen rettentes, szerintem.
Az eredetinek van egy teljesen normális logikája, hogy sorban megy végig a lépéseken és ha bármelyik nem sikerül, akkor game over. Ez meg gondos átolvasást igényel, hogy az ember rájöjjön, hogy mi is történik itt - mert maga a struktúra azt sugallja, hogy háromféle, nagyjából egyenértékű dologgal próbálkozunk, amiből az egyiknek kellene sikerülnie.
[ Szerkesztve ]
DRM is theft
-
pmonitor
tag
válasz
dabadab #6182 üzenetére
Ilyen alapon az én első kódomon is világosan látszik, hogy sorban megy végig a lépéseken és ha bármelyik nem sikerül, akkor game over., hogy téged idézzelek. Olvashatóságra az sem rossz. De nevemfel-é mégis jobb. De az sem sokkal rosszabbul olvasható.
[ Szerkesztve ]
https://www.bferi.hu/download.php ; https://bferi.hu/egyeb.php
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Jabra Evolve 75 MS Duo Bluetooth Headset eredeti keménytokjában + ajándék töltőállvány
- ALKALMI VÉTEL! Samsung Odyssey G5 165Hz & 1 MS Gamer monitor!
- Lenovo Thinkpad T440s. 14" Ips/i5-4300U/8gb/128GB SSD/Dupla Akku/Világító bill/Szép állapot.
- Sony Ericsson T290 mobilkészülék
- Logitech MX Master, eredeti dobozában! - professzionális tervezői-kreatív egér, kiváló állapotban
Állásajánlatok
Cég: Időkép Üzleti Szolgáltatások Kft.
Város: Budapest
Cég: ELPRO Systems Kft.
Város: Budapest