是在ANSI C以下有效?
#include <stdio.h>
/* This returns "Hans" if arg != 0, "Gretel" if arg == 0 */
char* foo(int arg)
{
return arg ? "Hans" : "Gretel";
}
int main()
{
char* p_ch;
p_ch = foo(1);
printf("%s\n", p_ch);
p_ch = foo(0);
printf("%s\n", p_ch);
return 0;
}
代碼在GCC/Linux下編譯並運行良好。
的MinGW/Windows的說:
invalid conversion from `const char*' to `char*'
微軟的Visual C/C++ 2008是細跟的代碼。
- 我可以將
char*
變量分配給字符串,而不是在其初始化點嗎? - 我讀過字符串文字有
static
定位類。這是否意味着它們在它們所定義的功能之外是不可見的? - 自從
const
類型轉換爲非const類型時,它們是無效的嗎?
我會聲明'foo'返回'const char *'。當編譯爲C++時,代碼變得無效。我不夠標準的專家來解釋爲什麼......我會希望GCC給出一些警告(但是即使是使用'-Wall -Wextra'的gcc 4.6也沒有)。 –
@Basile,因爲gcc正在編譯C代碼。在C中有這個_nothing_錯誤。如果你用g ++編譯它,那將是另一回事,但顯然如果你嘗試編譯完全有效的C代碼,gcc並不認爲它是一個問題。像「不能使用變量名'new''''''''''''''''''''''''''''可能有一天需要使用C++編譯器編譯這個''會令人討厭:-) – paxdiablo
@BasileStarynkevitch:gcc -Wwrite-警告。這可能不是'-Wextra'的一部分,因爲C庫的某些部分可能依賴於此功能;例如'strerror'具有返回類型'char *',但可以使用字符串文字數組來實現。 –