Portál AbcLinuxu, 11. listopadu 2025 10:52
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.