Visual Studio 2015开发 新功能概述

2016-05-04  本文已影响2797人  rontgen

本文概述

最近在将自己所在的项目升级到VS2015,本文记录和整理了一些在升级VS2015时自己所查阅的一些VS2015新功能资料,随着自己阅读的不断延伸,我会持续更新。这篇日志的主要内容如下所示:

  1. 调试部分: 将介绍一些有助于调试的新功能;
  2. 团队协作部分:主要介绍在VS2015中可以完成的git操作, 可以在VS2015中完成Git flow操作, 下载GitFlow for Visual Studio 2015
  3. 可能会影响编译部分的改动: 在升级旧工程过程中,遇到了一些编译问题,将会把自己遇到的一些问题和相关解决方案做一些介绍,希望能对有类似问题的朋友有所帮助。

1. 调试部分##

1.1 断点设置

VS2015引入了断点设置功能,当鼠标悬浮在断点上时,会出现设置按钮和断点禁用按钮。 light_bulbs.png

2. 团队协作功能

3. 可能会影响编译部分的改动

用VS2015打开原工程时,会弹出将platform tools set升级为VS2015(v140)的界面。 我当时选择了升级主工程以及依赖工程。但是在编译阶段,遇到了如下问题:

  1. fatal error C1189: #error: Macro definition of snprintf conflicts with Standard Library function declaration
    经过查阅相关资料,原来是在很多库中,使用了如下定义: #define snprintf _snprintf但是在VS2015中在C99中也定义了snprintf(),因此引发了重复定义。要解决此类错误,可通过如下预编译指令解决:
    #if _MSC_VER>=1900
    #define STDC99
    #else
    #ifndef snprintf
    #define snprintf _snprintf
    #endif
    #endif
    _MSC_VER相关宏定义如下:
    MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015)
    MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013)
    MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012)
    ......
  2. error LNK2019: unresolved external symbol _imp__fprintf referenced in function
    在网上查阅资料得知,是由于VS2015做了如下改动引起:
    在之前版本中:
    _CRTIMP FILE * __cdecl __iob_func(void);
    #define stdin (&__iob_func()[0])
    #define stdout (&__iob_func()[1])
    #define stderr (&__iob_func()[2])
    struct _iobuf {
    char *_ptr;
    int _cnt;
    char _base;
    int _flag;
    int _file;
    int _charbuf;
    int _bufsiz;
    char _tmpfname;
    };
    typedef struct _iobuf FILE;
    而在VS2015中:
    _ACRTIMP_ALT FILE
    __cdecl __acrt_iob_func(unsigned);
    #define stdin (__acrt_iob_func(0))
    #define stdout (__acrt_iob_func(1))
    #define stderr (__acrt_iob_func(2))
    typedef struct _iobuf
    {
    void
    _Placeholder;
    } FILE;
    解决方案

我找到了一篇微软有关VS2015C++重大改动的文章,有兴趣的同学请参考这里

上一篇下一篇

猜你喜欢

热点阅读