了解vala编译警告

时间:2013-10-19 16:15:32

标签: vala

下面的汇编警告对我来说并不是那么清楚 弃用warhing,但valadoc中方法的签名:

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

没有显示其他方法签名。

另一个警告更加模糊。


max@max-ubuntu:~/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);
    }
}

1 个答案:

答案 0 :(得分:11)

使用Vala时,通常可以忽略来自C编译器的警告。 Vala比C编译器有更好的信息,因此当C编译器无法知道时,它知道某些事情是有效的。不幸的是,我们无法在任何地方添加强制转换,因为在某些情况下我们无法生成有效的强制转换(更重要的是,无法知道这些情况是什么)。

关于g_type_init被弃用的最后警告是因为glib 2.36不再需要g_type_init。您可以通过将--target-glib = 2.36(或任何更高版本的glib)传递给valac来消除该警告,但请注意,生成的代码可能不再适用于较旧版本的glib。

TBH,我经常只是将-X -w传递给valac以使C编译器保持安静。偶尔我会错过一个有用的警告,但它会消除无用警告的很多