Funktionsprototyp ungleich Definition und kein Fehler
Verfasst: Do Dez 13, 2012 8:15 am
Hallo Zusammen,
hier habe folgende Frage:
Ich definiere in einer Übersetzungseinheit (calc_xyz.c) folgende Funktion
Damit ich die Funktion im Hauptmodul verwenden kann mach ich Folgendes:
Ich habe die beiden relevanten Codezeilen hier nochmal untereinander kopiert:
Definition: void calc_air_resistance(double A, double cw, double rho_air,double v_veh[], int length,double air_res[])
Prototyp: extern void calc_air_resistance(double A_veh, double cw, double rho_air,double v_veh[],double air_res[],int length);
Man beachte, dass die Signaturen (fehlerhafterweise) unterschiedlich sind (ich habe die Signatur in der Definition nochmal geändert und vergessen, dass im Prototypen nachzuziehen).
Meine Frage: Ich hätte erwartet, dass der Compiler (VC++ 2012) hier Alarm schlägt?!
Aber weit gefehlt, ich kann den Code kompilieren und linken und bekomme dann eine Ausnahme erst zur Laufzeit geworfen!?
Bin ich irgendwie falsch gewicklet oder mache ich was grundsätzlich falsch?
Gruß
Marcus
hier habe folgende Frage:
Ich definiere in einer Übersetzungseinheit (calc_xyz.c) folgende Funktion
Code: Alles auswählen
void calc_air_resistance(double A, double cw, double rho_air,double v_veh[], int length,double air_res[]){
/*calculates the air resistance of a passenger car
int i;
for(i=0;i<length;++i)
*(air_res+i)=0.5*rho_air*cw*A*(*(v_veh+i));
}
Code: Alles auswählen
#include<stdio.h>
#include <process.h>
//constants
#define A_VEH 2.0
#define CW 0.33
#define RHO_AIR 1.3
//Prototypes
extern void calc_air_resistance(double A_veh, double cw, double rho_air,double v_veh[],double air_res[],int length);
extern int save_data(char test[], double x[], double y[], int length);
void main(void){
double v_veh[]={30.0/3.6, 50.0/3.6, 120.0/3.6, 200/3.6};
const int length = sizeof(v_veh)/sizeof(double);
double air_res[4];
calc_air_resistance(A_VEH,CW,RHO_AIR,v_veh,air_res,length);
save_data("air_res.txt",v_veh,air_res,length);
system("gnuplot -persist -e \"set title 'Air resistance'; plot 'air_res.txt'\"");
}
Definition: void calc_air_resistance(double A, double cw, double rho_air,double v_veh[], int length,double air_res[])
Prototyp: extern void calc_air_resistance(double A_veh, double cw, double rho_air,double v_veh[],double air_res[],int length);
Man beachte, dass die Signaturen (fehlerhafterweise) unterschiedlich sind (ich habe die Signatur in der Definition nochmal geändert und vergessen, dass im Prototypen nachzuziehen).
Meine Frage: Ich hätte erwartet, dass der Compiler (VC++ 2012) hier Alarm schlägt?!
Aber weit gefehlt, ich kann den Code kompilieren und linken und bekomme dann eine Ausnahme erst zur Laufzeit geworfen!?
Bin ich irgendwie falsch gewicklet oder mache ich was grundsätzlich falsch?
Gruß
Marcus