C 和C++静态初始化之间的区别
Difference between C and C++ static initialization
编译此代码示例时
#include <stdio.h>
#include <stdlib.h>
int myfunc()
{
printf("Constructorn");
return 1;
}
static const int dummy = myfunc();
int main()
{
printf("mainn");
return 0;
}
当编译为C++时,它工作,但不能使用相同的编译器(MingW gcc)作为C。我在 C 模式下得到一个initializer element is not constant
。
因此,显然在静态初始化方面存在差异。有没有理由为什么这显然是允许的C++而不适用于 C ?这是因为否则您将无法使用构造函数的全局对象吗?
C++编译器会生成一个额外的"Start"函数,其中所有"全局函数调用"在PC(程序计数器)设置为"main"地址之前执行。
"全局函数调用"是为了初始化全局对象而执行的任何函数调用(包括隐式函数调用,即构造函数)。
C 编译器不会生成这样的"开始"函数,并且一旦操作系统加载可执行文件并运行进程,PC 就会设置为"main"。
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 这 4 个 lambda 表达式之间有什么区别?
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- (double) 和 double() 之间的区别
- & 和 * 之间的区别
- std::is_convertible 和 std::convertible_to 之间的区别(在实践中)?
- 析构函数和'delete'之间的区别
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- OpenMP #pragma omp for v/s #pragma omp parallel for 之间的区别?
- S() 与 S{} 之间的区别?