Verfasst am: 23.11.2012, 18:17
Titel: Wie unterdrückt man MEX-Warnungen?
Hallo zusammen!
Ich habe gerade ein Makefile für mein MATLAB Programm geschrieben, das nötige C-Files über MEX kompiliert.
Jetzt bekomme ich aber einige Warnungen auf der Command Line für die C-files, die stören.
Zitat:
func1.c.c: In function 'mexFunction':
func1.c:20: warning: assignment discards qualifiers from pointer target type
func1.c:23: warning: assignment discards qualifiers from pointer target type
func1.c:33: warning: passing argument 2 of 'mxCreateNumericArray_700' from incompatible pointer type
func2.c: In function 'mexFunction':
func2.c:42: warning: passing argument 4 of 'mxCreateStructMatrix_700' from incompatible pointer type
func2.c:44: warning: assignment discard
Ich konnte bisher nichts finden, mit dem ich die Warnungen wegmachen kann. Hat jemand eine Idee?
Verfasst am: 23.11.2012, 21:42
Titel: Re: Wie unterdrückt man MEX-Warnungen?
Hallo clustering_n00b,
C ist ausgesprochen fragil, ganz im Gegensatz zum gutmütigen und bombensicheren Matlab. Wenn der Compiler etwas am Code merkwürdig findet und eine Warnung ausgibt, ist das ein deutliches Zeichen dafür, dass der Code verbessert werden muss.
Man kann in C ohne weiteres ernste Probleme verursachen: Matlab abstürzen lassen, das Betriebssystem ebenfalls, oder schlimmer noch: Unbemerkt wichtige Daten überschreiben.
Beispiel: "assignment discards qualifiers from pointer target type" könnte heißen, dass Du einen CONST Pointer an eine Funktion übergibst, die einen volatile Pointer erwartet. Das hieße, dass die aufgerufene Funktion versuchen kann oder wird, den Wert einer Read-Only-Variable zu überschreiben. Das hat wahrscheinlich übele Folgen.
Die Warnungen einfach zu unterdrücken wäre deshalb eine fatale Idee. Besser man beseitigt die Ursachen.
Bitte poste die Zeilen aus dem C-Code, die die Warnungen verursachen und den relevanten anderen Code dazu. Dann ist ein Verbesserungsvorschlag möglich.
Gruß, Jan
PS. Dies ist zwar ein Matlab-Forum, aber Ratschläge zu C-Code in Mex-Funktionen gehört irgendwie schon zum Thema. Falls es zu spezielle C-Probleme sind, kann immer noch ein anderes Forum empfohlen werden.
Verfasst am: 23.11.2012, 23:09
Titel: Re: Wie unterdrückt man MEX-Warnungen?
Jan S hat Folgendes geschrieben:
Bitte poste die Zeilen aus dem C-Code, die die Warnungen verursachen und den relevanten anderen Code dazu. Dann ist ein Verbesserungsvorschlag möglich.
Jah - den Code habe ich nicht selber geschrieben. Daher wollte ich eigentlich Editierung vermeiden.
Dennoch, ich poste es mal hin:
Fehlermeldungen
Zitat:
getK_fast.c: In function 'mexFunction':
getK_fast.c:20: warning: assignment discards qualifiers from pointer target type
getK_fast.c:23: warning: assignment discards qualifiers from pointer target type
getK_fast.c:33: warning: passing argument 2 of 'mxCreateNumericArray_700' from incompatible pointer type
splat3_fast.c: In function 'mexFunction':
splat3_fast.c:42: warning: passing argument 4 of 'mxCreateStructMatrix_700' from incompatible pointer type
splat3_fast.c:44: warning: assignment discards qualifiers from pointer target type
splat3_fast.c:47: warning: assignment discards qualifiers from pointer target type
splat3_fast.c:50: warning: assignment discards qualifiers from pointer target type
splat3_fast.c:57: warning: assignment from incompatible pointer type
splat3_fast.c:102: warning: passing argument 2 of 'mxCreateNumericArray_700' from incompatible pointer type
splat3_fast.c:109: warning: passing argument 2 of 'mxCreateNumericArray_700' from incompatible pointer type
splat3_fast.c:110: warning: passing argument 2 of 'mxCreateNumericArray_700' from incompatible pointer type
splat3_fast.c:111: warning: passing argument 2 of 'mxCreateNumericArray_700' from incompatible pointer type
splat3_fast.c:112: warning: passing argument 2 of 'mxCreateNumericArray_700' from incompatible pointer type
splat3_fast.c:113: warning: passing argument 2 of 'mxCreateNumericArray_700' from incompatible pointer type
splat3_fast.c:114: warning: passing argument 2 of 'mxCreateNumericArray_700' from incompatible pointer type
splat3_fast.c:115: warning: passing argument 2 of 'mxCreateNumericArray_700' from incompatible pointer type
splat3_fast.c:116: warning: passing argument 2 of 'mxCreateNumericArray_700' from incompatible pointer type
splat3_fast.c:133: warning: assignment from incompatible pointer type
splat3_fast.c:134: warning: assignment from incompatible pointer type
splat3_fast.c:135: warning: assignment from incompatible pointer type
splat3_fast.c:136: warning: assignment from incompatible pointer type
splat3_fast.c:137: warning: assignment from incompatible pointer type
splat3_fast.c:138: warning: assignment from incompatible pointer type
splat3_fast.c:139: warning: assignment from incompatible pointer type
splat3_fast.c:140: warning: assignment from incompatible pointer type
splat3_backprop_fast.c: In function 'mexFunction':
splat3_backprop_fast.c:21: warning: assignment discards qualifiers from pointer target type
splat3_backprop_fast.c:22: warning: assignment discards qualifiers from pointer target type
splat3_backprop_fast.c:23: warning: assignment discards qualifiers from pointer target type
splat3_backprop_fast.c:24: warning: assignment discards qualifiers from pointer target type
splat3_backprop_fast.c:25: warning: assignment discards qualifiers from pointer target type
splat3_backprop_fast.c:26: warning: assignment discards qualifiers from pointer target type
splat3_backprop_fast.c:27: warning: assignment discards qualifiers from pointer target type
splat3_backprop_fast.c:28: warning: assignment discards qualifiers from pointer target type
splat3_backprop_fast.c:29: warning: assignment discards qualifiers from pointer target type
splat3_backprop_fast.c:30: warning: assignment discards qualifiers from pointer target type
splat3_backprop_fast.c:31: warning: assignment discards qualifiers from pointer target type
splat3_backprop_fast.c:32: warning: assignment discards qualifiers from pointer target type
splat3_backprop_fast.c:42: warning: assignment from incompatible pointer type
splat3_backprop_fast.c:43: warning: assignment from incompatible pointer type
splat3_backprop_fast.c:44: warning: assignment from incompatible pointer type
splat3_backprop_fast.c:45: warning: assignment from incompatible pointer type
splat3_backprop_fast.c:46: warning: assignment from incompatible pointer type
splat3_backprop_fast.c:47: warning: assignment from incompatible pointer type
splat3_backprop_fast.c:48: warning: assignment from incompatible pointer type
splat3_backprop_fast.c:49: warning: assignment from incompatible pointer type
splat3_backprop_fast.c:54: warning: assignment from incompatible pointer type
interp1_fixed_sum_fast.c: In function 'mexFunction':
interp1_fixed_sum_fast.c:19: warning: assignment discards qualifiers from pointer target type
interp1_fixed_sum_fast.c:25: warning: assignment discards qualifiers from pointer target type
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.