Fórumok
Helló,
két kérdésem volna.
1, Ha csak a szabványos C könyvtárakat lehet használni (sulis házi, mennie kell Windowson és Linuxon is) akkor hogy tudom egy fájl hosszát megtudni.
2,
int distance(Station* stationA,Station* stationB){
return (SPEED/3600) * sqrt(pow(stationA->x - stationB->x,2)+pow(stationA->y - stationB->y,2));
}
Föntire azt írja hogy, undefined reference to 'sqrt'. Miért van ez?
Ha ezt írom:
int distance(Station* stationA,Station* stationB){
return (SPEED/3600) * sqrt(5);
}
akkor simán lefordul.
Előre is köszi a válaszokat.
üdv
Szati
Hozzászólások
2.
Linkeld a math libet -lm kapcsolóval a fordításkor.
Meg persze
__________
0x2A
Köszi. Azt nem tudod esteleg hogy a Visual Studioban hogy kell hozzálinkelni a math könyvtárat.Majd megnézem a manualban de ha esteleg tudod akkor az úgy még egyszerűbb...
irja az sqrtnél, hogy "all versions of the C runtime libraries", nincs külön math library
Ne gondolkodj rajta. Linkeld hozza az m-et. Csak tipp.
Csak a complex-re talaltam meg a szoveget.
Your C-compiler can work with complex numbers if it supports the C99 standard. Link with -lm. The imaginary unit is represented by I.
1.) az említett stat() függvény egy struktúrát ad vissza (egy direktszorzat vagy rekord típust), amelynek van olyan mezője, ami a fájl bájtoban mért hosszát tartalmazza.
2.) Egy Linux man oldalból:
NAME
sqrt, sqrtf, sqrtl - square root function
SYNOPSIS
#include
double sqrt(double x);
float sqrtf(float x);
long double sqrtl(long double x);
Link with -lm.
(itt megköveteli a linkelést, de ez az általános)
1) stat fv.is talán jó. Mindenesetre BSD és Linux rendszereken is megy :)
(man 2 stat)
1. Mint fent mások is említették, stat() megmondja egy fájl méretét az st_size mezőben. Ha egy FILE* adott (és a fájlnév nem), akkor fseek-kel a végére mész, és ftell-lel lekérdezed az aktuális pozíciót.
2. Az sqrt(5) és az sqrt(pow(stationA->x - stationB->x,2) hívások között az a lényeges különbség, hogy az előbbit a gcc fordítási időben lecseréli 2-re (mivel int-et kell visszaadni), tehát az sqrt függvény soha nem hívódik meg, tehát nincs rá szükség, míg az utóbbi esetben az sqrt() függvény meghívódik, és a gcc-nek az -lm kapcsolót meg kell adni, ezzel jelezve, hogy a /lib/libm.so*-ban van az sqrt() függvény.
... meg a pow() is...