Hirdetés
Új hozzászólás Aktív témák
-
Karma
félisten
válasz
buherton
#4197
üzenetére
Már hogyne volna C stílusú ez a fajta zárójelezés.
Amellett, hogy Ritchie eléggé a nyelv alkotója, nagy open source projektekben is előfordul, hogy ez a forma mellett döntenek.De persze az is gyakori, hogy új sorba rakják. C-ben én is úgy szoktam, de ettől nem lesz univerzális igazság.
-
Jester01
veterán
válasz
stranger28
#4198
üzenetére
Szerintem alapvetően nincs baj az int*-al, bár tény, hogy C-ben ilyen nincs de szerintem olvashatóbb. Személy szerint szigorúan követem a soronként csak 1 változó elvet, így a "hová tartozik a *" probléma nem érint.
Ja és még a beolvasásod nem bolondbiztos. Igaz, azt C-ben nehéz is csinálni, de első körben legalább a scanf visszatérési értékét ajánlott ellenőrizni.
-
buherton
őstag
válasz
stranger28
#4193
üzenetére
Kiegészítés (#4195) dabadab hsz-re.
1. feleslegesek a typecast-ok és a jövőben kerüld ezeket, mert könnyen kerülhetsz olyan helyzetbe, amikor jön a fej vakarás, mert nem fut a kód, mint például:
void foo(long *bar)
{
*bar = 23424234;
}
int main(void)
{
char bar;
foo(&bar);
return 0;
}2. formázás: ez az adott sor végére rakni a { nem C-szerű formázás, hanem tán a Java-ból jön, és ajánlott ott használni. Továbbá próbáld kialakítani a saját stílusod, és tartsd magad ahhoz, mert könnyebb neked és másnak is olvasni a kódod.
int* foo; helyett int *foo; mert ebből is lehetnek gondok, mint int* foo, bar; és két pointer helyett lesz egy pointer és egy változó, és nincs olyan típus, hogy int pointer, hanem int-re mutató pointer van csak.
3. óvatosan az ilyenekkel:
for(i=0;i<n;i++)
if (palyak[i]==0)
{
nemsi_index[a]=i;
a++;
}Ugyanis nem feltétlenül portable a kód. Sajnos nem mindegyik fogadja el így ezt a formát. Az ilyen formával már kevésbé lehet gond:
for(...)
{
if(...)
...;
...;
} -
válasz
stranger28
#4193
üzenetére
Par dolog:
0. Az egesz cuccban egy darab komment sincs, pedig azt erdemes gyakorolni, mert kulon tudomany.
1. "magic value"-ket a kodba irni nem tul jo gyakorlat, jobb konstanskent kezelni oket, illetve C-ben makrokent, szoval "#define MIN100_NOT_FOUND -1"
2. A free()-ket erdemes pont forditott sorrendben meghivni, mint a malloc()-ot, egyreszt, mert ugy maradnak meg szepen a blokkok, masreszt meg lehet, hogy egy kesobb malloc()-olt strukturaban egy pointer egy elozoleg lefoglalt memoriateruletre mutat - es ha az elso free()-zed, a masodikrol meg azt gondolod, hogy az meg ervenyes adatokat tartalmaz, abbol baj lesz.
3. A valtozoneveket (konstansokat, makrokat, file-okat, kommenteket) angolul tessek irni.
4. A nemsi_index teljesen felesleges. Lehetne mondani, hogy azert van igy, hogy meglegyen a funkcionalis tagolas (beolvasas, feldolgozas, kiiras), de ez egyebkent sincs meg (amire teljesen elfogadhato magyarazat, hogy igy hatekonyabb a kod - leszamitva ezt a franya nemsi_indexet).
5. Ha megis a tagolas mellett dontenel, akkor erdemes lenne azt harom fuggvenybe kirakni.
-
greenity
senior tag
válasz
stranger28
#4193
üzenetére
Nekem tetszik, nálam elég úri lenne

-
stranger28
addikt
Üdv!
Érdekelne, hogy a kódom mennyire "elegáns" megoldás a következő egyszerű kis feladatra:
Egy hójelentés N sípályán mért hóréteget tartalmazza.
Készíts programot, amely beolvassa a sípályák számát (1≤N≤20) és az egyes pályákon a hóréteg vastagságát (0≤V(i)≤100), majd
A. megadja, hogy melyik sípályán a legnagyobb a hóréteg;
B. megad egy sípályát, ahol a hóréteg legalább 100 cm vastag;
C. megadja azokat a sípályákat, ahol nem lehet síelni (azaz a hóréteg vastagsága 0)!1-20,0-100 és egyéb hülyebiztos vizsgálatokkal most nem töltöttem az időt.
#include <stdio.h>
#include <stdlib.h>
int main(){
int i,n,a=0;
int* palyak;
int maxi=0;
int leg100=-1;
int nemsi=0;
int* nemsi_index;
printf("Palyak szama: ");
scanf("%d",&n);
palyak=(int*)malloc(sizeof(int)*n);
for(i=0;i<n;i++){
printf("%d. palya: ",i+1);
scanf("%d",&palyak[i]);
if (palyak[i]>palyak[maxi]) maxi=i;
if (palyak[i]>=100 && leg100==-1) leg100=i;
if (palyak[i]==0) nemsi++;
}
nemsi_index=(int*)malloc(sizeof(int)*nemsi);
for(i=0;i<n;i++)
if (palyak[i]==0){
nemsi_index[a]=i;
a++;
}
printf("\nLegnagyobb: %d\n",maxi+1);
printf("Van 100 cm ho: %d\n",leg100+1);
printf("Nem lehet sielni %d palyan:",nemsi);
for(i=0;i<nemsi;i++){
printf(" %d",nemsi_index[i]+1);
}
free(palyak);
free(nemsi_index);
return 0;
}Hülyén hangzik, de tényleg erre mennek rá, hogy mennyire úri.

(#4192) aAron_: Én innen szedtem le a keybindert, az minden ilyet megold.
-
aAron_
őstag
válasz
Ereshkigal
#4191
üzenetére
az lett végül, ott beraktam valahova majd töröltem, így most jó, remélem mással nem lesz problémám már
köszi a segítségeket

-
-
buherton
őstag
Default eclipse beállításnál is ilyen problémák vannak. Állítsd át a billentyűzet kiosztást
.MOD: Ugye az angol billentyűzeten a speciális karaktereknek más hol van a helyük, így ők nyugodt szívvel tesznek ide billentyű kombinációkat.
-
aAron_
őstag
sziasztok!
az egyik desktopomra (win8x64) most tettem fel először a codeblocks-ot, minden jónak tűnik, kivéve, hogy nem tudok " { " karaktert írni, helyette ezt írja mindig:
/** \brief
*
* \param
* \param
* \return
*
*/mi lehet a baj? alt gr + B gondolom valami shortcut, de alapértelmezetten? kicsit furcsa

-
greenity
senior tag
válasz
dabadab
#4186
üzenetére
Ma lnko-t meg faktoriálist meg binomiálist számoltunk.
Úgy kezdtük, hogy statikusan adtuk meg az adatokat, és utána mutattam meg a scanf-et, miután már megcsináltuk a programokat.Az a nagyobb gond, hogy a csapat nagy része még nem látott linuxot, így aztán már ezzel is problémák voltak.
Majdnem minden második embernek én lépegettem be cd-vel a mappájába... másodszorra már ment..
De lehet az elején linux gyorstalpalót kéne tartsak.. -
-
greenity
senior tag
Sziasztok!
Lehet nem itt kéne kérdeznem, de olyan emberkéknek tartok programozást, akik nem tanultak még ilyet.
A tutorom azt mondta, hogy matematikai problémákat oldjunk meg folyamatábrával, majd kódoljuk le c-ben.
Ha esetleg lenne valami ötletetek, hogy mit lehetne nekik adni, annak nagyon örülnék.LNKO-t, faktoriálist, páros és páratlan függvények kiíratását gondoltam eddig, de nem igazán jut olyan eszembe, amit könnyű szívvel adok nekik, akár csak matekból...
-
-
Jester01
veterán
Az akkor lehet, ha elfelejtetted hozzálinkelni a math könyvtárat. Minden bizonnyal valamit panaszkodott is a fordító, legközelebb azt is írd meg nekünk, valamint keress rá az interneten is. Jelen esetben valószínűleg undefined reference hibát kaptál ami azt jelenti, a linker nem talált valami hivatkozott szimbólumot. Ilyenkor ha nem elírás történt, akkor hiányzó könyvtárak/modulok felé kell keresgélni. Konstansra azért fordulhat, mert azt szerencsés esetben a fordító kiszámolja így nincs szükség a tényleges atan implementációra.
Végül pedig a gyógymódról. Nem írtad milyen környezetet használsz, parancssoros gcc esetén -lm kapcsolót kell alkalmazni. A -l segítségével lehet függvénykönyvtárakat hozzáadni a beszédes m pedig a matek könyvtár neve. IDE környezetben meg kell keresni hol lehet további könyvtárakat (library) beállítani és ott fel kell venni a matek könyvtárat.
-
zitto
csendes tag
Egy kis segítséget szeretnék kérni.
Még nemrég kezdtem programozni tanulni ráadásul egyedül.
A problémám az lenne, hogy ezt a kódott nem fordítja le a compiler, csak akkor, ha az atan-on belül szám van és nem egy előre definiált változó. Nem értem miért, kérlek segítsetek:#include <stdio.h> /* printf */
#include <math.h> /* atan */#define PI 3.14159265
int main ()
{
double param, result;
param = 1.0;
result = atan (param) * 180 / PI;
printf ("The arc tangent of %f is %f degrees\n", param, result );
return 0;
} -
eriktoth
tag
Időközbe megoldódott
még hozzáférek a sulishoz -
eriktoth
tag
Üdv! Valaki esetleg nem tud valami free servereket fejlesztésre? anno volt suliba amin putty-val könnyen el lehetett érni, és fejlesztgetni rajta. Valami hasonlót keresnék
-
Jester01
veterán
Mint rajottem, az ftell/fgetpos csak akkor mukodik "helyesen", ha mar olvastam a streambol.
Ha elso olvasas elott adom ki, akkor -20-at ad vissza, es innentol fogja egyesevel novelni/csokkenteni a poziciot minden getc/ungetc utan, nem nullatol.Ezt nehezen hiszem, és ha tényleg így van az bug.
Nekem egyébként működik linuxon, akár text akár binary módban nyitom meg a fájlt. -
nyunyu
félisten
Bontsuk kette a problemat.
Mint rajottem, az ftell/fgetpos csak akkor mukodik "helyesen", ha mar olvastam a streambol.
Ha elso olvasas elott adom ki, akkor -20-at ad vissza, es innentol fogja egyesevel novelni/csokkenteni a poziciot minden getc/ungetc utan, nem nullatol.
Ez a kisebbik problema.Nagyobbik bajom az, hogy a getc platform fuggoen kezeli a sorvege karaktereket.
Pl. Visual C++ 2010 Win alatt ha \n karaktert lat, akkor lenyeli az utana jovo \r karaktert es mindig kettovel noveli a fajl poziciot.
Ez azert problema, mert a feldolgozando forraskodok egy resze UNIX alatt lett mentve, ott meg nincsen \r az \n utan, de akkor is kettovel noveli a poziciot...Plusz nehezitesnek vannak olyan forraskodok is, amiben nincs \n, hanem \r-rel vannak tordelve.

Probaltam szamolni, hany getc/ungetc-nel jarunk, de az sem ad pontos eredmenyt, mivel nem tudom eldonteni, hogy a latott \n karakternel eggyel vagy kettovel noveljem az indexet.
Windows alatt automatikusan utana rakott \r egyaltalan nem jon at a getc-vel, nem tudom megszamolni. -
nyunyu
félisten
Hogyan lehet _megbizhatoan_ lekerdezni, hanyadik karakternel tartunk az eppen feldolgozott fajlban, majd a lementett poziciora visszaugrani?
ftell neha negativ erteket ad vissza, majd a kovetkezo karakter olvasasa utan az elozo rossz ertek+1-et, aztan fseek(fp, pos, SEEK_SET)-re total mashova ugrik, nem a "megjelolt" karakterhez.
fgetpos paros is ugyanazokat az ertekeket adja vissza, mint az ftell.
Ha manualisan szamolom a karaktereket minden getc/ungetc-nel, akkor sem pont oda ugrik vissza.
Probaltam Win alatt VC++ 2010-zel, meg linux alatt GCC-vel, mindegyik produkalja.
Feldolgozando fajl szoveget tartalmaz, mind win, mind linux stilusu sortores is elofordulhat benne. -
alapz@j
tag
válasz
Jester01
#4166
üzenetére
Huh, nagyon jó ez a GCC Explorer, meg is adta a választ:
int main() {
for (int i = 0; i < 5; ++i) {
int x = i + 10;
}
}g++ 4.8 (-O és más kapcsolók nélkül)
main:
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-8], 0
jmp .L2
.L3:
mov eax, DWORD PTR [rbp-8]
add eax, 10
mov DWORD PTR [rbp-4], eax
add DWORD PTR [rbp-8], 1
.L2:
cmp DWORD PTR [rbp-8], 4
jle .L3
mov eax, 0
pop rbp
retÉrdekes, ha jól olvasom, akkor a teljes stack allokálás (int i és int x is) megtörténik már a ciklus előtt, azaz nincs sem menet közbeni allokálás, sem blokk utáni deallokálás.
-
Jester01
veterán
válasz
alapz@j
#4165
üzenetére
Ahogy a kollega írta, logikailag megsemmisül és a szabvány csak ennyit ír elő.
Az már fordítófüggő, hogy ez hogyan néz ki gépi kód szinten, de rendesen optimalizáló fordító nyilván előre lefoglalja a területet és újrahasznosítja. Mellesleg a stack kezelésnek igen minimális az overheadje hiszen csak egy-egy pointer művelet.Ha érdekel a végeredmény hogy néz ki akkor kérj assembly listát a fordítódtól vagy használd ezt a remek weboldalt.
-
alapz@j
tag
Egy C99
for (..) {
int x = ...
}ciklusban az x minden iterációnál létrejön/megsemmisül a stack-en vagy csak egyszer és mindig az kerül felhasználásra?
-
tototos
addikt
Sziasztok!
Mi a különbség a két függvény között? Mi alapján kell használni az externt és mi alapján nem?
extern void do(int,int)
void do (int,int) -
tototos
addikt
Sziasztok!
Egy kis preprocesszor segítség kellene.
A következőt szeretném valahogy fordítás előtt megcsinálni.
Adott a következő 2 define#define CHG_I2C I2C1
#define GPIO_AF_I2C1 0x000Ehhez kellene egy macro ami kb így nézne ki.
#define CONCAT(a,b)
ennek azt kellene csinálni hogy
CONCAT(GPIO_AF_,CHG_I2C) meghívása után a GPIO_AF_I2C1 legyenPróbálkoztam sok dologgal de még nem sikerült rájönni melyik a jó kombináció.
Ú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!
- Kormányok / autós szimulátorok topikja
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Android alkalmazások - szoftver kibeszélő topik
- Ami Kínában OnePlus Pad Pro, az errefelé mégis csak Pad 2 lett
- Kerékpárosok, bringások ide!
- Óra topik
- Suzuki topik
- Xiaomi 15T Pro - a téma nincs lezárva
- Crimson Desert
- Anglia - élmények, tapasztalatok
- További aktív témák...
- DDR5 8/ 16/ 32GB 4800-5600MHz UDIMM PC RAM, több db- számla, garancia
- Asus Zephyrus G16 GAMING Notebook! Ultra 9 185H / RTX 4060 / 32GB 7500MHz / 1TB! BeszámítOK
- AKCIÓ! Dell Precision 3571 4G LTE i7-12700H 32GB 1000GB FHD RTX A1000 4GB 1 év teljeskörű garancia
- 127db TV/Monitor Bazár (Samsung, LG, Philips, Sony)
- Gigabyte RTX 5060 Ti 16GB // Felbontott, új // SZÁMLA // GARANCIA //
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Amellett, hogy Ritchie eléggé a nyelv alkotója, nagy open source projektekben is előfordul, hogy ez a forma mellett döntenek.









