2012-05-18 30 views
1

這裏是一個簡短的程序來演示這個問題:爲什麼在將unichar轉換爲vala中的字符串時會出現編譯警告?

void main(string[] args) 
{ 
    unichar c = 'a'; 
    string str_from_to_string = c.to_string(); // Warning 
    stdout.printf("Converted by unichar.to_string: \"%s\"\n", str_from_to_string); 
} 

這也導致了同樣的警告:

void main(string[] args) 
{ 
    unichar c = 'a'; 
    string str_from_template = @"$c"; // Warning 
    stdout.printf("Converted by string template: \"%s\"\n", str_from_template); 
} 

這是我得到的警告:

/home/mpiroc/Desktop/unicode_to_string/unicode_to_string.vala.c: In function ‘g_unichar_to_string’: 
/home/mpiroc/Desktop/unicode_to_string/unicode_to_string.vala.c:26:2: warning: passing argument 2 of ‘g_unichar_to_utf8’ discards ‘const’ qualifier from pointer target type [enabled by default] 
/usr/include/glib-2.0/glib/gunicode.h:684:11: note: expected ‘gchar *’ but argument is of type ‘const gchar *’ 

這裏是警告中提到的生成的c代碼:

18 static gchar* g_unichar_to_string (gunichar self) { 
19  gchar* result = NULL; 
20  gchar* _tmp0_ = NULL; 
21  gchar* str; 
22  const gchar* _tmp1_; 
23  _tmp0_ = g_new0 (gchar, 7); 
24  str = (gchar*) _tmp0_; 
25  _tmp1_ = str; 
26  g_unichar_to_utf8 (self, _tmp1_); 
27  result = str; 
28  return result; 
29 } 

看來好像_tmp_可能不應該標記爲const,但這是由valac生成的,不是由我直接編寫的。難道我做錯了什麼?或者這是valac中的一個錯誤?代碼的功能與預期的一樣,但我儘可能避免發出警告。

回答

1

Add --disable-warnings command-line option

IIRC瓦拉編譯器也可以使用--disable-warnigs命令行選項。

編輯:

gcc commandline options

對不起,華劣克是transpiler,所以一旦華劣克--ccode輸出,然後 需要運行GCC或其他編譯器。

$ valac --ccode unicode_to_string.vala 
$ gcc -o unicode_to_string -w unicode_to_string.c `pkg-config --libs --cflags gobject-2.0` 
+0

你也可以''valac -X -w -o unicode_to_string unicode_to_string.vala'。 --Xcc/-X會告訴valac將提供的參數傳遞給CC。 – nemequ

1

Vala編譯器不會生成臨時變量const。您可以放心地忽略關於const -ness的警告。

+0

它不?那麼爲什麼生成的代碼中的'_tmp1_'爲'const'?這顯然是一個臨時變量。 – sepp2k

+0

Err。不正確地使變量或參數'const'。在這種情況下,'g_unichar_to_string'是'unichar'的一個實例方法,但它不會將'self'參數標記爲'const'。 Vala重複的臨時變量是'const',因爲編譯器知道它不打算修改它們。這就是導致上述錯誤的原因:'unichar'的臨時副本是'const',而'unichar.to_string()'的實例方法不會將'self'(即實例參數)標記爲'const' 。 – apmasell

+1

不,這不是問題。問題是'g_unichar_to_utf8'的第二個參數是一個非const指針(這是有道理的,因爲它將被修改),但是代碼傳遞'_tmp1_'作爲參數,這是一個const指針。所以問題不是valac在某個地方忘了const,而是它添加了一個不屬於它的地方。 – sepp2k

相關問題