[VC++] C言語の初期値

2013年11月21日

 VC++(VS2012) で以下のプログラムを、コマンドラインでコンパイルして実行。

#include <stdio.h>

void func() {
    int a[10];
    int i;

    printf("-----------");

    for (i=0; i<10; i++) {
       printf("%08xn",a[i]);  // 初期化前の値を表示

       a[i] = 0x1234;          // 初期化?
    }
}

int main() {
    func();  // 一回目
    func();  // 二回目
}

 コンパイルのコマンドはこう。

cl ConsoleApplication1.c

 結果はこんな。自動変数は初期化されていないのがわかる。

C>test
-----------
011937fb
00e0f708
01199118
00e0f784
011924a0
35abafe8
fffffffe
0119538c
01195457
011937fb
-----------
00001234
00001234
00001234
00001234
00001234
00001234
00001234
00001234
00001234
00001234

 

 次に、VS2012 の IDE 上で、「Win32 コンソールアプリケーション」で作成、コンパイルしてみる。ソースコードは以下。

#include "stdafx.h"

void func() {

    printf("-----------n");

    int a[10];
    for (int i=0; i<10; i++) {
       printf("%08xn",a[i]);  // 初期化前の値を表示

       a[i] = 0x1234;          // 初期化?
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    func();  // 一回目
    func();  // 二回目

	return 0;
}

 結果はこんな。

-----------
cccccccc
cccccccc
cccccccc
cccccccc
cccccccc
cccccccc
cccccccc
cccccccc
cccccccc
cccccccc
-----------
cccccccc
cccccccc
cccccccc
cccccccc
cccccccc
cccccccc
cccccccc
cccccccc
cccccccc
cccccccc

 0xcc で初期化されている。(*1)

 

 おまけに C# でもやってみる。

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void func()
        {
            Console.WriteLine("-----------");

            int[] a = new int[10];

            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("{0}", a[i]);

                a[i] = 0x1234;
            }
        }

        static void Main(string[] args)
        {
            func();  // 一回目
            func();  // 二回目
        }
    }
}

 結果はこう。

-----------
0
0
0
0
0
0
0
0
0
0
-----------
0
0
0
0
0
0
0
0
0
0

 C# はつまらん…(何

 

 

(*1)
 これは、デバックモードで実行した結果です。
 デバックモードでは、コンパイルオプション /RTCs 相当が指定されていることに起因します。
  http://msdn.microsoft.com/ja-jp/library/8wtf2dfz.aspx
 したがって、このオプションを外せば、C++ の場合でも上記 C言語と同様に自動変数は初期化されません。






カテゴリー: Program, Visual C++

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org