是在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 *',但可以使用字符串文字数组来实现。 –