Supponendo che tu utilizzi C o C++, l'idea è che devi lavorare con due file anziché uno, e uno di questo due (il grader) non lo devi (o meglio "non lo dovresti") modificare.chi mi spiega bene come si eseguono in locale grader e funzione creata per fare i test? come si richiama quest'ultima?gianpiero96
int somma(int, int);
int main() {
// lettura da file di a, b
// chiamata di somma(a, b) e scrittura del risultato su file
return 0;
}
int somma(int x, int y) {
return x + y;
}
Per capire come si fa a compilare "insieme" due file che si riferiscono a vicenda (come in questo caso) devi sapere che il processo che spesso viene semplicemente chiamato "compilazione" in realtà è suddiviso in due fasi distinte che avvengono una dopo l'altra: (1) compilazione, (2) linking.
Assumiamo che per compilare un file utilizziamo questo comando (che produce di default, se tutto va a buon fine, un eseguibile a.out)
gcc nome_file.c
Questo comando in realtà prima compila nome_file.c in un file oggetto con estensione .o, e infine linka questo file oggetto creando un eseguibile.
Chiaramente, se provi a compilare con quel comando uno solo dei due file di cui abbiamo parlato prima, riceverai un errore nella fase di linking:
- linkando il file oggetto ottenuto dalla compilazione di grader.c, ci sarà un errore che dice che il riferimento a "somma" non è definito.
- linkando il file oggetto ottenuto dalla compilazione di tuasoluzione.c, ci sarà un errore che dice che manca il riferimento alla main().
Un modo per "risolvere" il problema è quello di compilare entrambi i file, per poi eseguire la fase di linking su entrambi i file oggetto (con estensione .o) che sono stati creati. Ovvero:
gcc nome_file1.c nome_file2.c
In questo modo la fase di linking andrà a buon fine (dato che tutti i riferimenti ci sono) e verrà prodotto l'eseguibile a.out (per specificargli un altro nome, si può usare come sempre il flag -o di gcc).
tl;dr
Un modo è questo:
1) Crea per ogni problema una cartella apposita, in ogni cartella crea uno script bash chiamato "compila.sh" con dentro:
#!/bin/bash
gcc -o tuoeseguibile grader.c tuasoluzione.c
2) Fai tasto destro sul file, vai sulle proprietà e impostalo come eseguibile (assumo che si stia usando Ubuntu).
3) Configura il tuo IDE in modo da mappare una combinazione di tasti a "esegui compila.sh".
4) Configura il tuo IDE in modo da mappare un'altra combinazione di tasti a "esegui tuoeseguibile".