Portál AbcLinuxu, 12. května 2025 08:20
FILE *soubor; soubor = (FILE*) fopen ("soubor", "r");je vše v pořádku. Jakmile to změním na:
FILE *soubor; soubor = (FILE*) g_fopen ("soubor", "r");hodí překladač chybu, no pravda, jenom warning:
warning: cast to pointer from integer of different sizeDíky moc za odpověď.
FILE *fopen (const char *path, const char *mode); FILE *g_fopen (const gchar *filename, const gchar *mode);Jestli char a gchar jsou stejné, tak by to mělo fungovat.
Proc to castujete? fopen i g_fopen vrati FILE* sami od sebe.
Nasledujici program se u me prelozi zcela bez chyb a varovani.
#include <glib.h> #include <glib/gstdio.h> int main() { FILE* f = g_fopen(".bashrc", "r"); return !f; }
-Wall
. Pak vás bude i céčkový překladač upozorňovat na volání nedeklarovaných funkcí. Defaultně si je totiž implicitně dodeklaruje s návratovým typem int
, což může vést k záhadným chybám za běhu. Kdybyste to totiž překládal 32-bitovým překladačem, nedostal byste ani tuto chybu, protože int
i FILE*
by měly oba 32 bitů…
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.