2016-07-18 11 views
2

Ich versuche, einen Fehler zu erkennen, so dass ich in meinem Programm einige Spuren aufgenommen. Das Problem ist, dass nach, dass es nicht kompilieren, mich nächste Fehler geben:Kompilierungsfehler: Fprintf wirft Parse Fehler

../src/DR700_API.c:46: parse error before `*' 

habe ich nur noch eine fprintf am Anfang jeder Funktion:

fprintf(stdout,"_name_of_function_"); 

kommentierte alle fprintf es kompiliert richtig, also ist da der fehler. Ich kann nicht auf sie verzichten, da ich andere Fehler in der Ausführungszeit verfolgen möchte.

Hier ist ein kleines Beispiel:

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

ImprFunc *DR700_new()                              
{                                   
    fprintf(stdout,"DR700_new");                           
    ImprFunc *impr = (ImprFunc *)malloc(sizeof(DR700_ImprFunc));                    
    if (impr == NULL)                              
     return NULL; 
... 


../src/DR700_API.c:46: parse error before `*' 
../src/DR700_API.c:47: `impr' undeclared (first use in this function) 
../src/DR700_API.c:47: (Each undeclared identifier is reported only once 
../src/DR700_API.c:47: for each function it appears in.) 
make: *** [../obj/DR700_API.o] Error 1 

Antwort

2

Wahrscheinlich hat Sie Setup nicht gemischten Code und Erklärungen lassen (per C89). Wenn Sie das Setup des Projekts nicht beeinflussen möchten, versuchen Sie, die Deklarationen vor jedem Code zu behalten. In Ihrem Beispiel bedeutet es

ImprFunc *impr = (ImprFunc *)malloc(sizeof(DR700_ImprFunc)); 
fprintf(stdout,"DR700_new"); 

statt

fprintf(stdout,"DR700_new"); 
ImprFunc *impr = (ImprFunc *)malloc(sizeof(DR700_ImprFunc)); 

Oder alternativ - add -std=c99 (wie es in den Kommentaren erwähnt).

+1

oder fügen Sie -std = c99 in die Build-Flags ein. Aber für neue gcc ist es nicht wirklich, da es standardmäßig -std = c11 verwendet – alexanius

+0

Ich habe es auf die erste Art und Weise und es hat gut funktioniert. Vielen Dank! – Joster

2

In früheren Versionen von C mussten Variablen am Anfang eines Blocks deklariert werden.

C99 ermöglicht, willkürlich Deklarationen und Anweisungen zu mischen (z. B. siehe Variable declaration placement in C und Where can I legally declare a variable in C99?).

Sie könnten versuchen, mit --std=c99/--std=c11 kompilieren, die Ihnen erlauben, Variablen überall zu erklären (wenn in Ihrer Version von gcc unterstützt. Siehe Status of C99 features in GCC und C11Status).

C99 ist größtenteils abwärtskompatibel mit C89.

+0

Danke, das war das Problem. – Joster