C/Visual C - Problema: Compilar cabecera.h para listas

   
Vista:

Problema: Compilar cabecera.h para listas

Publicado por Diego (86 intervenciones) el 29/06/2016 17:41:38
Buenas tardes, trato de compilar esta pequeña libreria para una lista y me sale el siguiente error:

ejecuto en consola: gcc -Wall -o prueba.c lista.c

/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: En la función `_start':
(.text+0x20): referencia a `main' sin definir
collect2: error: ld returned 1 exit status

Seguidamente el archivo prueba.c Desaparece de la carpeta.

Prueba,c
1
2
3
4
5
6
7
8
9
10
#include "lista.h"
int main(int argc, char *argv[]){
	Lista miLista;
	char nombre[23] = "Diego":
	long dni = 36717113;
	crear_lista(&miLista);
	insertar(&miLista, nombre, dni);
	mostrar_lista(&miLista);
	return 0;
}

lista.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifndef LISTA_H
#define LISTA_H
	#include <stdlib.h>
	#include <stdio.h>
	#include <string.h>
	struct nodo{
		char nombre[23];
		long  dni;
		struct nodo *siguiente;
	};
	typedef struct nodo * Lista;
	void crear_lista(Lista *);
	void insertar(Lista *, char *, long);
	void mostrar_lista(Lista *);
#endif

lista.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "lista.h"
void crear_lista(Lista *miLista)
{
	*miLista = NULL;
}
void insertar(Lista *miLista, char *nombre, long dni)
{
	Lista aux;
	aux = (Lista) malloc(sizeof(struct nodo));
	if (aux != NULL){
		strcpy(aux->nombre, nombre);
		aux->dni = dni;
		aux->siguiente = *miLista;
		*miLista = aux;
	}
}
void mostrar_lista(Lista *miLista)
{
	Lista aux;
	aux = *miLista;
	while (aux != NULL){
		printf("datos\n");
		printf("-----\n");
		printf("nombre: %s    ", aux->nombre);
		printf("dni: %lu\n", aux->dni);
		aux = aux->siguiente;
	}
}

Me pidieron que evitara incluir multiples veces las mismas librerias. Por ese motivo implemente el uso de #ifndef; AUnque no sè si lo apliquè correctamente.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problema: Compilar cabecera.h para listas

Publicado por chema (187 intervenciones) el 29/06/2016 18:41:12
Los nombres de los ficheros que contengan mayúscula o números, no son recomendables,
tienes, Prueba.c y ejecutas.

gcc -Wall -o prueba.c lista.c


En la medida que puedas por cuestión de estilo y claridad, evita incluir ficheros de cabecera en los include.

1
2
3
4
5
6
7
#ifndef LISTA_H
#define LISTA_H
	#include <stdlib.h>
	#include <stdio.h>
	#include <string.h>
 
#endif

Codificar con normas de estilo simples y claras es justo y necesario.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema: Compilar cabecera.h para listas

Publicado por Chema (187 intervenciones) el 29/06/2016 20:30:16
El uso de #ifndef en los include tiene su sentido en proyectos medianos , grandes o o con una estructura de include compleja.

Tengo la mala suerte(muy complejos. señales, procesos, memoria compartida,semáforos, ordenamientos más grandes que la memoria disponible.....y un sinfin de cositas muy divertidas) de realizar proyectos de 30/50 o más include , además en un modelo servidor 24/365, el cual me obliga a medir los include de los procesos hijos fijos y los procesos temporales, y , por supuesto, no encontrame cosas raras en la compilación que me pueden volver loco, por eso uso de serie #ifndef
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema: Compilar cabecera.h para listas

Publicado por Diego (86 intervenciones) el 29/06/2016 22:27:18
Gracias, olvidè ponerle un nombre al programa con el -o
ahora si compilò correctamente.
modiqué lista.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifndef LISTA_H
#define LISTA_H
	#include <stdlib.h>
	#include <stdio.h>
	#include <string.h>
#endif
	struct nodo{
		char nombre[23];
		long  dni;
		struct nodo *siguiente;
	};
	typedef struct nodo * Lista;
	void crear_lista(Lista *);
	void insertar(Lista *, char *, long);
	void mostrar_lista(Lista *);

ejecutè en consola: gcc -Wall -o prueba.c lista.c
Y prueba.c volvió a desaparecer.
Despues de eso, recordè que no le di un nombre al programa

Deberìa haber ejecutado:

gcc -Wall -o prueba.exe prueba.c lista.c

Luego tenìa un : en vez de ; en prueba.c, lo corregí y compiló sin errores.

Ahora estoy intentando hallar normas para la escritura en C;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema: Compilar cabecera.h para listas

Publicado por Chema (3 intervenciones) el 30/06/2016 09:23:56
Si por estilo entiendes cuestiones estéticas.
Busca en Google indent windows.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar