Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    non rieco a far funzionare questi file..

    come da titolo non riesco ad utilizzare questi file assieme...credo (sottolineo credo perchè potrebbe essere una supidata galattica (sono un niubbo di C..)) si un problema di link..

    i file sono:

    main.c

    /*
    * more
    * main subroutine - copy input to output
    */

    #include <stdio.h>

    int main()
    {
    int ch, colcnt, rowcnt;

    colcnt = 1;
    rowcnt = 1;
    while ( (ch = getchar()) != EOF )
    {
    putchar(ch);
    if ( more(ch, &colcnt, &rowcnt) == 0 )
    {
    break;
    }
    }
    exit(0);
    }


    more.c

    /*
    * more
    * more subroutine - controls command prompting
    * base on screen size
    */

    #include "defs.h"

    int more(char ch, int *colcnt, int *rowcnt) {
    int Value; /* returned by this function */

    if ( ch == '\n' || *colcnt >= LINESIZE )
    {
    *colcnt = 1;
    (*rowcnt)++;
    } else
    {
    (*colcnt)++;
    }
    if ( *rowcnt == SCRNSIZE )
    {
    Value = command(rowcnt);
    } else
    {
    Value = 1;
    }
    return(Value);
    }


    command.c

    /*
    * more
    * command subroutine - prompts for command
    */

    #include <stdio.h>
    #include "defs.h"

    int command(int *rowcnt)
    {
    static FILE *fp = NULL;
    int Ch, Value;

    if ( fp == NULL )
    {
    fp = fopen("/dev/tty", "r");
    }
    printf("more?");
    fflush(stdout);
    if ( (Ch = getc(fp)) == ONELINE )
    {
    *rowcnt = SCRNSIZE - 1;
    Value = 1;
    } else if ( Ch == ONESCREEN )
    {
    *rowcnt = 0;
    Value = 1;
    } else
    {
    Value = 0;
    }
    while ( Ch != EOF && Ch != '\n' )
    {
    Ch = getc(fp);
    }
    return(Value);
    }


    defs.h

    /*
    * more
    * definitions
    */

    #define SCRNSIZE 23
    #define LINESIZE 80
    #define ONELINE '\n'
    #define ONESCREEN ' '


    makefile

    #
    # makefile per costruire il file eseguibile More
    #
    # Seguono le definizioni di alcune macro
    #
    CC = gcc
    SRC = main.c more.c command.c
    DEF = defs.h
    OBJ = $(SRC:.c=.o)

    # La macro $@ prende il nome del target corrente More

    More: $(OBJ)
    $(CC) $(OBJ) -o $@
    .c.o:
    $(CC) -c $<

    # Si puo' utilizzare anche la dipendenza implicita dei target,
    # dettata dal suffisso .c, cosicche' e' sufficiente scrivere
    # solamente le regole dove compare la dipendenza esplicita da
    # "defs.h"

    more.o: $(DEF)
    command.o: $(DEF)


    clean:
    /bin/rm -f $(OBJ) More *~


    teoricamente lanciando il comando make dovrebbe crearsi l'eseguibile..
    ma non mi succede...
    mi ritovo pieno di error e warning.. sapreste aiutarmi??grazie!!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Io ho copiato tutti i file che hai postato su una linux box e li ho provati. Ho solamente aggiunto un -Wall nel makefile per la fase di compilazione dei sorgenti.
    Risultato:
    codice:
    gcc -Wall -c main.c
    main.c: In function `main':
    main.c:17: warning: implicit declaration of function `more'
    main.c:22: warning: implicit declaration of function `exit'
    gcc -Wall -c more.c
    more.c: In function `more':
    more.c:22: warning: implicit declaration of function `command'
    gcc -Wall -c command.c
    gcc main.o more.o command.o -o More
    I warning sono dovuti al fatto che nei sorgenti non hai dichiarato le funzioni presenti negli altri sorgenti. Nel main.c, per esempio, hai usato la funzione more() senza averla dichiarata.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    ho aggiunto -Wall nel file make file così:

    CC = gcc -Wall
    SRC = main.c more.c command.c
    DEF = defs.h
    OBJ = $(SRC:.c=.o)


    questo è il mio risultato della compilazione..

    paul@linux:~/Desktop/prova> make
    gcc -Wall -c -o main.o main.c
    main.c: In function ‘main’:
    main.c:17: warning: implicit declaration of function ‘more’
    main.c:22: warning: implicit declaration of function ‘exit’
    main.c:22: warning: incompatible implicit declaration of built-in function ‘exit’
    gcc -Wall -c -o more.o more.c
    more.c: In function ‘more’:
    more.c:22: warning: implicit declaration of function ‘command’
    more.c:28:3: warning: no newline at end of file
    gcc -Wall -c -o command.o command.c
    command.c:37:3: warning: no newline at end of file
    make: *** No rule to make target `gcc', needed by `More'. Stop.

    però ancora non va..

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da superpaul82
    però ancora non va..
    Allora:
    1) Dichiara nei sorgenti le funzioni che usi e che sono implementate in altri sorgenti.
    2) Assicurati che nel makefile i comandi delle regole abbiano 1 TAB davanti.
    3) Per usare la funzione exit() devi includere anche stdlib.h
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    scusa se ti rompo ancora, ma anch dopo aver ricontrollato il makefile ancora non va...
    potresti, per favore, mandarmi via mail o via mp i tuoi file?grazie mille!

    mi ritorna sempre questo errore...
    make: *** No rule to make target `gcc', needed by `More'. Stop.

    se riesci a mandarmi i tuoi file te ne sarei veramente grato!
    intanto grazie comunque!

  6. #6
    sono riuscito a farlo andare!!grazie mille!
    però adesso ho un dubbio..
    e volessi selezionare certe righe di un file con questo metodo come dovrei fare?
    il file lo cambio nel file command.c vero?al posto di /dev/tty ci metto miofile?
    Però per partire da una riga in particolare passatagli dal main?
    Grazie in anticipo!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.