Cだと思っていたらC++だった

error C2440: ‘初期化中’: ‘void *’ から ‘char *’ に変換できません。

警告:C言語なのにC++コンパイラ使ってる?


エラーが出たらC++

#define  _CRT_SECURE_NO_WARNINGS    1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
    char    s1[3] = "123";//エラーが出たらC++ 
    char    *s2 = malloc(sizeof("123")); //エラーが出たらK&R-CかC++
    if(s2 == NULL){
        perror(NULL);
        exit(1);
    }
    strncpy(s2,s1,3);
    free(s2);

    if(sizeof('A') == sizeof(char))
        puts("貴方はC++コンパイラを使っています");
    else if(sizeof('A') == sizeof(int))
        puts("貴方はCコンパイラを使っています");
}

Visual Studio使用者でC言語のつもりで
C++コンパイラを起動している場合が
けっこうあります。

ご利用のコンパイラで上記のプログラムが
コンパイルできれば
Cコンパイラをご利用です。
コンパイルエラーになれば
C++コンパイラを起動しています。

多くの場合
Visual Studioでプロジェクトを作る際に 
main.c でなくて
main.cpp で登録してしまっているようです。

接尾子が.cppの場合自動的にC++のプログラムと判断され、
C++コンパイラが起動されます。