gcc error bei bool prototyp

C

CptRick

Mitglied
Hiho,

ich wollte grade folgenden source mit dem gcc kompilieren:

Code:
#include <stdio.h>
#include <stdlib.h>

int get_chip_size();
int get_ram_size();
bool get_chip_template(int chip[], int chip_size, char path[]);

int main( int argc, char * argv[] ) {

	// Initializing the chip array
	
	int chip_size;

	chip_size = get_chip_size();
	if(chip_size == 0) return EXIT_SUCCESS ;

	int chip[chip_size];

	// Initializing the ram array

	int ram_size;

	ram_size = get_ram_size();
	if(ram_size == 0) return EXIT_SUCCESS ;

	float ram[ram_size];
	
	return EXIT_SUCCESS ;
}

int get_chip_size() {

	int size;
	
	printf("\n___ Chipset size ___");
	printf("\n|                  |");
	printf("\n| (1) 4    Bit     |");
	printf("\n| (2) 8    Bit     |");
	printf("\n| (3) 16   Bit     |");
	printf("\n| (4) 32   Bit     |");
	printf("\n| (5) 64   Bit     |");
	printf("\n| (6) 128  Bit     |");
	printf("\n| (0) exit         |");
	printf("\n|__________________|");

	printf("\n\n: ");
	scanf("%d", &size);
	
	while( size < 0 || size > 6 ) {

		printf("\nExpecting decimal number bewtween 1 and 6!");		
		printf("\n: ");
		scanf("%d", &size);

	}

	return size;
}

int get_ram_size() {

	int size;
	
	printf("\n_______ RAM size ______");
	printf("\n|                     |");
	printf("\n| number of RAM decks |");
	printf("\n| (0) exit            |");
	printf("\n|_____________________|");

	printf("\n\n: ");
	scanf("%d", &size);
	
	while( size < 0 ) {

		printf("\nExpecting decimal positive number!");		
		printf("\n: ");
		scanf("%d", &size);

	}

	return size;
}

bool get_chip_template(int chip[], int chip_size, char path[]) {
	
	int c, i=0, temp;
	FILE *ptr;

	if( !(ptr = fopen(path[],"r") ) return FALSE ;

	while ((c = fgetc(ptr)) != EOF) {

		if( c != 10 || c != 27 ) { // use New Line and Space as seperator
			
			c -= 48;
			if(c < 0) return FALSE ;			
			temp = c * 10;
	
			if ( ((c = fgetc(ptr)) != EOF) || i > chip_size) {

				c -= 48;
				if(c < 0) return FALSE ;	
				temp += c;
				chip[i++] = temp;

			} else {

				return FALSE ;

			}

		}

	}
	
	for( i = i; i == chip_size; i++ ) chip[i] = 0;
	fclose(ptr);
	return TRUE ;
}

Nun spuckt der gcc aber einen seltsamen error aus:
Code:
[99%+]arne@deepthought:~$ gcc -Wall -o chipset chipset.c
chipset.c:6: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘get_chip_template’
chipset.c: In function ‘main’:
chipset.c:26: warning: unused variable ‘ram’
chipset.c:17: warning: unused variable ‘chip’
chipset.c: At top level:
chipset.c:84: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘get_chip_template’
[99%+]arne@deepthought:~$

Wenn ich die Funktion mit integer deklariere kommt der error zwar nicht, aber die Funktion soll schon bool'sche Werte zurückgeben.
 
C kennt doch keine bool-Werte, oder hab ich was verpasst?
 
0 wird als "false" behandelt, ja, aber es gibt diesen Datentyp in C nicht als "Datentyp". Steht auch auf dem Link, den du gepostet hast ;)

(...oder ich drück mich grad nur unglücklich aus... jedenfalls musstt du wohl oder übel bei C mit int arbeiten)
 
Zuletzt bearbeitet:
Code:
if( !(ptr = fopen(path[],"r") ) return FALSE ;
Zähl in der Zeile mal die öffnenden und die schließenden Klammern.

Außerdem kennt c schon bool, nur heißt es "_Bool" und nicht "bool". Die "Konstanten" TRUE und FALSE kennt c afaik jedenfalls nicht. Lieber 0 und 1 benutzen. (Und _Bool kann man eigentlich auch als int deklarieren. Der Funktionsname sollte Dokumentation genug zu sein...)

Edit: schauste hier und auch gleich hier.

Ich würde sagen: _Bool braucht man nicht wirklich.. integer tuns genauso. Und mit so'nem #define-Mist fang gar nicht erst an... ("#define TRUE 1" oder sowas...)
 
Zuletzt bearbeitet:
_Bool ist aber auch nicht sehr ANSI, oder? (Wenn ja, wieder was neues gelernt :) )
 
Ist c99. Steht auch in dem von mir geposteten Link. 0;

edit: k, der gepostete Link, den ich reineditiert hab nachdem du hier geantwortet hast. Timing nennt sich sowas.
 
Zuletzt bearbeitet:
Super, danke!

Ich löse es mit int.
Dieser Defien Wust kann übel werden^^

Code:
#define six 1+5
#define nine 8+1

int main(void)
{
printf("%i", six * nine);
return 0;
}
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

Code:
if( !(ptr = fopen(path[],"r") ) return FALSE ;
Zähl in der Zeile mal die öffnenden und die schließenden Klammern.

Den Error bekam ich auch freundlich präsentiert nachdem ich den bool kram gelöscht hatte, trotzdem danke;)
 
Zuletzt bearbeitet:
Wieso Aua?
Man muss doch nicht zwangsweise den Speicher per malloc erweitern, ich kann doch auch erst das array initialisieren wenn ich die genaue größe kenne ...
 
Hier mal ein Zitat aus C von A bis Z von Jürgen Wolf

Merke Die Größe eines Arrays muss zum Zeitpunkt der Übersetzung in der Regel bekannt sein. In C gibt es keine wachsenden Arrays. Natürlich gibt es auch hierzu wieder die Ausnahme von der Regel. Näheres dazu in Kapitel 15, Zeiger (Pointer).

nur soviel dazu
 
Vielen Dank für die super Erklärung.

Ich werde mich dann wohl doch wieder intensiever mit Pointern beschäftigen müssen ...
Hätte nicht gedacht, dass verschiedene Standarts von C so weit auseinander gehen.
 
Jetzt mal abgesehen davon, das so ein Code

Code:
int main( int argc, char * argv[] ) {

	// Initializing the chip array
	
	int chip_size;

	chip_size = get_chip_size();
	if(chip_size == 0) return EXIT_SUCCESS ;

	int chip[chip_size];

	// Initializing the ram array

	int ram_size;

	ram_size = get_ram_size();
	if(ram_size == 0) return EXIT_SUCCESS ;

	float ram[ram_size];
	
	return EXIT_SUCCESS ;

in jeder Sprache auf diesem Planeten ein Haufen Bullshit ist.

Völliger Müll, und den Rest hab ich mir noch nicht mal angesehen.
 
Jetzt mal abgesehen davon, das so ein Code

[...]

in jeder Sprache auf diesem Planeten ein Haufen Bullshit ist.

Völliger Müll, und den Rest hab ich mir noch nicht mal angesehen.



Sehr direkt;)
Aber deine Botschaft ist angekommen und ich schreibe dieses Programm um wieder mal etwas in C zu machen, dar Programmieren um Laufe meines Studiums (Bauingenieurwesen) etwas zu kurz gekommen ist. Also keine Sorge, ich werde dieses Programm ganz sicher nicht in diesem Zustand auf die Menschheit loslassen;)
 
Zuletzt bearbeitet:

Ähnliche Themen

Unix Webserver mit HTML Seite erstellen

GCC liefert in Eclipse Kompilierfehler

Ausführbare C-Datei von Mac OS auf Embedded Linux ausführen

kann mir das jemand erklären?

Shellskript - Fehler in Cron

Zurück
Oben