2013-10-19 11 views
5

Die Kompilation Warnungen sind unten nicht so klar für mich, appart vom deprecation warhing, aber die Unterschrift des Verfahrens in der valadoc:Verständnis vala Kompilierung Warnungen

http://valadoc.org/#!api=gstreamer-1.0/Gst

zeigt keine andere Methode Signatur.

die anderen Warnungen sind obskurer.

 

[email protected]:~/mdev/cr valac --pkg gstreamer-0.10 gstpipe.vala 
/home/max/dev/main-sandbox/cr/gstpipe.vala.c: In function ‘application_message’: 
/home/max/dev/main-sandbox/cr/gstpipe.vala.c:64:2: warning: passing argument 1 of ‘_gst_structure_copy0’ discards ‘const’ qualifier from pointer target type [enabled by default] 
/home/max/dev/main-sandbox/cr/gstpipe.vala.c:26:17: note: expected ‘gpointer’ but argument is of type ‘const struct GstStructure *’ 
/home/max/dev/main-sandbox/cr/gstpipe.vala.c:82:9: warning: assignment discards ‘const’ qualifier from pointer target type [enabled by default] 
/home/max/dev/main-sandbox/cr/gstpipe.vala.c: In function ‘main’: 
/home/max/dev/main-sandbox/cr/gstpipe.vala.c:173:2: warning: ‘g_type_init’ is deprecated (declared at /usr/include/glib-2.0/gobject/gtype.h:669) [-Wdeprecated-declarations] 

 

using Gst; 


void application_message(Gst.Bus bus, Gst.Message msg) { 

     var s = msg.get_structure(); 

     if(s == null) 
      return; 

     string msgtype = s.get_name(); 

     if(msgtype != "level") 
      return; 

     GLib.Value rms = s.get_value("rms"); 
     //GLib.Value st = s.get_value("stream-time"); 

     GLib.DateTime now = new GLib.DateTime.now_local(); 

     var sec = now.to_unix(); 
     var msec = (sec * 1000) + now.get_microsecond();   

     var z = rms.strdup_contents(); 

     //z = z.replace("{", "[").replace("}", "]"); 

     stdout.printf("%ld, %s \n", (long) msec, z); 
} 


void main (string[] args) { 

    Gst.init (ref args); 

    try { 

     var pipeline = Gst.parse_launch(
      "pulsesrc device=\"alsa_input.usb-046d_08c9_674634A4-02-U0x46d0x8c9.analog-mono\" ! " + 
      "level name=wavelevel interval=10000000 ! " + 
      "wavenc ! filesink location=audioz.wav" 
     ); 

     var bus = pipeline.get_bus(); 

     bus.add_signal_watch(); 
     bus.message.connect(application_message); 

     // Set pipeline state to PLAYING 
     pipeline.set_state (State.PLAYING); 

     // Creating and starting a GLib main loop 
     new MainLoop().run();   
    } 
    catch(Error e) { 
     print("%s\n", e.message); 
    } 
} 

Antwort

11

Sie können im allgemeinen Warnungen aus den C-Compiler ignorieren, wenn Vala verwenden. Vala hat bessere Informationen als der C-Compiler, daher weiß es, dass gewisse Dinge gültig sind, wenn der C-Compiler keine Möglichkeit hat, das zu wissen. Leider können wir Casts nicht überall hinzufügen, da es Situationen gibt, in denen wir keine gültige Besetzung generieren können (und außerdem nicht wissen, was diese Situationen sind).

Die letzte Warnung, dass g_type_init veraltet ist, liegt daran, dass g_type_init ab glib 2.36 nicht mehr benötigt wird. Sie können diese Warnung loswerden, indem Sie --target-glib = 2.36 (oder eine spätere Version von glib) an valac übergeben, aber seien Sie gewarnt, dass der generierte Code möglicherweise nicht mehr mit älteren Versionen von glib funktioniert.

TBH, ich übergebe oft -X -w an valac, um den C-Compiler zu beruhigen. Gelegentlich verpasse ich eine nützliche Warnung, aber es wird ein Los von nutzlosen Warnungen los.