首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

局部静态变量初始化有关问题

2013-09-12 
局部静态变量初始化问题在C中对静态变量初始化必须使用常量,但最近偶然遇到一个问题,在C++中竟然可以使用

局部静态变量初始化问题
在C中对静态变量初始化必须使用常量,但最近偶然遇到一个问题,在C++中竟然可以使用变量初始化静态变量。我对C++不熟悉,这是C++的一个特性吗,C++标准上有说明吗?
以下的测试程序是在保证语义不变的情况下的实例

// For C ---> Error
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int test(void)
{
   static int a = rand(); // ---> Error, initializer is not a constant
   return ++a;
}

int main(void)
{
   int i;
   srand((unsigned)time(NULL));
   for (i = 0; i < 10; ++i)
   {
      printf("%d\n", test());
   }

   return 0;
}

// For C++ ---> OK
#include <iostream>
#include <ctime>
using namespace std;

int test(void)
{
   static int a = rand(); // ---> OK, why not error
   return ++a;
}

int main(void)
{
   srand((unsigned)time(NULL));
   for (int i = 0; i < 10; ++i)
   {
      cout << test() << endl;
   }

   return 0;
}

[解决办法]
C中对静态变量初始化必须使用常量
但是c++是可以动态的了
[解决办法]
C里面只允许静态初始化, C++允许动态初始化,可以参考C++标准3.6.2节

热点排行