WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Wie unterdrückt man MEX-Warnungen?

 

clustering_n00b
Forum-Century

Forum-Century


Beiträge: 129
Anmeldedatum: 05.09.11
Wohnort: ---
Version: R2011a, R2012b
     Beitrag Verfasst am: 23.11.2012, 18:17     Titel: Wie unterdrückt man MEX-Warnungen?
  Antworten mit Zitat      
Hallo zusammen! Smile


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?
Private Nachricht senden Benutzer-Profile anzeigen


dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.11.2012, 21:25     Titel:
  Antworten mit Zitat      
Das hängt vom verwendeten Compiler ab.

http://msdn.microsoft.com/en-us/library/2c8f766e%28VS.80%29.aspx
oder
http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html

habe beides noch nicht im Zusammenhang mit ML verwendet, sollte aber grundsätzlich so funktionieren.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.11.2012, 21:42     Titel: Re: Wie unterdrückt man MEX-Warnungen?
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
clustering_n00b
Themenstarter

Forum-Century

Forum-Century


Beiträge: 129
Anmeldedatum: 05.09.11
Wohnort: ---
Version: R2011a, R2012b
     Beitrag Verfasst am: 23.11.2012, 23:09     Titel: Re: Wie unterdrückt man MEX-Warnungen?
  Antworten mit Zitat      
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






Zeilen 20 - 23 für getK_fast.c
Code:

  Z_mat = varargin[0];
  Z = mxGetPr(Z_mat);
 
  Z_sz = mxGetDimensions(Z_mat);
 




Zeilen 41 - 47 für splat3_fast.c
Code:

  char *fields[18] = {"valid", "span", "n_bins", "bin_width", "bin_area", "dims", "N", "idx111", "idx112", "idx121", "idx122", "idx211", "idx212", "idx221", "idx222", "f1", "f2"};
  varargout[0] = mxCreateStructMatrix(1, 1, 17, fields);
 
  X_mat = varargin[0];
  X = mxGetPr(X_mat);
 
  bin_range_low_mat = varargin[1];
 




Zeilen 102 - 116 für splat3_fast.c
Code:

N_mat = mxCreateNumericArray(3, &int_dims, mxDOUBLE_CLASS, 0);
  mxSetField(varargout[0], 0, "N", N_mat);
  N = mxGetPr(N_mat);
 
 
  sz_mat[0] = (int)n;
  sz_mat[1] = (int)1;
  idx111_mat = mxCreateNumericArray(2, &sz_mat, mxUINT32_CLASS, 0);
  idx112_mat = mxCreateNumericArray(2, &sz_mat, mxUINT32_CLASS, 0);
  idx121_mat = mxCreateNumericArray(2, &sz_mat, mxUINT32_CLASS, 0);
  idx122_mat = mxCreateNumericArray(2, &sz_mat, mxUINT32_CLASS, 0);
  idx211_mat = mxCreateNumericArray(2, &sz_mat, mxUINT32_CLASS, 0);
  idx212_mat = mxCreateNumericArray(2, &sz_mat, mxUINT32_CLASS, 0);
  idx221_mat = mxCreateNumericArray(2, &sz_mat, mxUINT32_CLASS, 0);
  idx222_mat = mxCreateNumericArray(2, &sz_mat, mxUINT32_CLASS, 0);
 


Der nächste Error scheint von den obigen Variablen abhängig zu sein.
Zeilen 21 - 32 für splat3_backprop_fast.c
Code:

  d_loss_N_mat = varargin[0];
  idx111_mat = varargin[1];
  idx112_mat = varargin[2];
  idx121_mat = varargin[3];
  idx122_mat = varargin[4];
  idx211_mat = varargin[5];
  idx212_mat = varargin[6];
  idx221_mat = varargin[7];
  idx222_mat = varargin[8];
  f1_mat = varargin[9];
  f2_mat = varargin[10];
  valid_mat = varargin[11];
 



Dies ist wieder ein Abhängigkeitsproblem
Zeilen 42 - 54 für splat3_backprop_fast.c
Code:

  idx111 = mxGetPr(idx111_mat);
  idx112 = mxGetPr(idx112_mat);
  idx121 = mxGetPr(idx121_mat);
  idx122 = mxGetPr(idx122_mat);
  idx211 = mxGetPr(idx211_mat);
  idx212 = mxGetPr(idx212_mat);
  idx221 = mxGetPr(idx221_mat);
  idx222 = mxGetPr(idx222_mat);
 
  f1 = mxGetPr(f1_mat);
  f2 = mxGetPr(f2_mat);
 
  valid = mxGetPr(valid_mat);
 



Und zuletzt noch:
Zeilen 19, 25 für interp1_fixed_sum_fast.c
Code:

  mxArray *X_mat, *LUT_F_mat;  
  X_mat = varargin[0];  
  LUT_F_mat = varargin[3];
 



Das ist ein riesiges Wirrwarr!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.