Difference between MSVC and gcc

最近发现VS2010(MSVC系列编译器), 和GCC比要弱很多,有些方便程序员的语法在GCC可以完美支持,到了VS就不行了,例如下面的代码:

double findMedianSortedArrays(int A[], int m, int B[], int n) 
{
    if(m+n==0) return 0;
    if(m+n==1)
    {
        if(m==0)
            return B[0];
        else if(n==0)
            return A[0];
    }
    int C[m+n];
    //vector<int> C(100);
    merge(A,A+m,B,A+n,C);
    int mid=0+(m+n-1)/2;
    if((m+n)%2==1)
        return C[mid];
    else
    {
        return double(C[mid]+C[mid+1])/2;
    }

}

int main()
{
    int a[]={}, b[]={2,3};
    cout<<findMedianSortedArrays(a,sizeof(a)/sizeof(int),b,sizeof(b)/sizeof(int))<<endl;
    return 0;
}

我最近发现cplusplus站点有个很好的类似于脚本语言立马知道函数或者语法正确性的一个site,点击example代码右侧的edit run,可以直接在web里面
emulate cpp的执行,而且我也突然体会到为啥大家喜欢用脚本语言了,因为有个解释器,而不是编译器,不确定函数或者定义正确否,到解释器里一试便知,
只可惜之前最熟悉的脚本语言是几乎只被researcher玩的matlab= =,工业界几乎不用。。。。之前偶然看到某大神说的,python库按照比较方便,库也越来越多了,
如果不确定可以到解释器里试,我还是因为来一来debugger,觉得python不方便debug而一直没有上手,现在知道自己错了,python打法好,退*保平安!

回到正题,上面几处是符合GCC标准的,例如编译变长,执行定长的数组定义,int C[m+n]; 当时刚学C++发现了这个在VS中不允许的语法。

另外还有空数组 GCC允许,VS不允许int a[]={},于是我在VS里写了代码,拿G++编译的= =,G++是包含GCC的一个编译器,多出一些C++的语法编译,G++ GCC对待
.c .cpp这四种组合,只有gcc 对.c 是当成C编译的,其他除非写个extern “C” 否则都是当CPP,默认是C98(C03和C98差别非常小,几乎当成一样,虽然是随后对C98的
小的修改), 加上-std=c++0x, 是C++11, 可以用很多STL里面新的东西,例如unordered_*之类的。

Posted by richard爱闹 - 7月 20 2014
如需转载,请注明: 本文来自 Richard