Przenosiłem własny program z windy na linuxa. Na windowsa był napisany w Dev-C++. Pliki źródłowe miały rozszerzenie cpp, ale program był napisany w całości w c.
Kopiuje pliki do katalogu domowego, zmieniam rozszerzenie na c, i przystępuje do edycji. W programie wykorzystałem gniazda i wątki, ale większość opierała się na bibliotece standardowej. Edycja polegała na zmianie plików nagłówkowych, typów zmiennych i kilku nazw funkcji(do wątków). Wszystko wyglądało dobrze.
Założyłem nowy projekt w Code::Blocs (język C) dodaje pliki, opcje do kompilatora i Build.
Fragment pliku file.c
Kod:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "file.h"
#define MAX_SOCKS 5
extern bool file;
extern char* filename;
extern FILE* plik;
void u_set_file(char* name,int first) //EDIT mała poprawka
{
filename=(char*)malloc(128);
int a=strlen(name);
int i=0;
for(int b=first;b<a;b+=1)
{
filename[i]=name[b];
i+=1;
}
filename[i]=0;
file=true;
}
A oto jakie błędy wywalił kompilator:
Kod:
file.c:8: błąd: expected `=,, `,,, `;,, `asm, or `__attribute__, before `file,
file.c: W funkcji `u_set_file,:
file.c:18: błąd: for, loop initial declaration used outside C99 mode
file.c:25: błąd: `file, undeclared (first use in this function)
file.c:25: błąd: (Each undeclared identifier is reported only once
file.c:25: błąd: for each function it appears in.)
file.c:25: błąd: `true, undeclared (first use in this function)
W tej funkcji jest pętla for i gcc wywalał błąd:
for, loop initial declaration used outside C99 mode (pomoga deklaracja zmiennej sterującej poza pętlą)
w innych plikach mam takie same petle i nie było błędów, a tutaj jeszcze jest coś e linii: extern bool file; ( w innych plikach brak błędów) co wywołuje następne.
Co jest nie tak
Dodam jeszcze, że to jedyny plik gdzie jest includowane stdlib.h i string.h