5 c c++ scope initialization global-variables
今天无意中在全局范围内声明了一个变量,并用函数调用的返回值对其进行了初始化。用visual studio 2015编译的代码没有问题,我很惊讶它确实如此。我去了一个在线 C 编译器,因为我没有,并尝试编译但它失败并显示错误消息:
错误:初始化元素不是常量。
好吧,我很惊讶地看到了这一点,因为自然而然,C++ 不像 C11 那样允许 VLA。我的意思是,C++ 往往比 C 更严格。
为什么这在 C++ 中是允许的,而在 C 中不允许?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *G_ptr = (char *)malloc(1000);
int main(void)
{
strcpy(G_ptr, "Hello, World");
puts(G_ptr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
尽管 C++ 就其共享特性而言往往比 C 更严格(没有隐式声明、字符串字面量的隐式常量等),但使用非常量表达式在文件范围内初始化变量是一个全新的特性. 自从第一个标准问世以来,它就一直在该语言中。
该功能有些争议,因为对于不同翻译单元中的变量未指定初始化顺序。我怀疑这可能会导致标准委员会不愿为较新的 C 标准之一添加类似的功能。
| 归档时间: |
|
| 查看次数: |
2006 次 |
| 最近记录: |