C kérdés

 ( szaty | 2007. október 27., szombat - 18:43 )

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á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ő.

1.
f = fopen("xxxxxxx.xxx","r");
fseek(f, 0, SEEK_END);
meret = ftell(f);

2.
Linkeld a math libet -lm kapcsolóval a fordításkor.
Meg persze #include <math.h>
__________
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...