VS 编译出现 error C2059: 语法错误:“{” 的一种解决方案

背景

开始着手一个新的项目,项目放在内部的 gitlab 中,无论直接打包下载还是通过 git 下载到本地,通过 VS 2017 编译都会出现error C2059: 语法错误:“{”。

项目是一个 C++ 的底层库,主要运行在 Windows 和 MacOS 平台。

解决方案

首先这是 microsoft 对于编译器error C2059的解决方案

但是底层库都可以在打包机上进行打包,本身应该不会有语法错误,于是怀疑是自身环境问题。

找了一个经验丰富的同事进行求教,同事怀疑是文件编码的问题。于是我将部分 cpp 的文件格式保存为utf-8 with bom,进行单独编译,结果不报错误。于是我通过 Winhex 和 BCompare 对比发现和文件中换行符都不同。

fine,问题大概已经明确是文件编码问题,又对比了 gitlab 上的文件,发现下载的文件确实就是utf-8。于是又开始怀疑是自身环境问题,底层库的源文件很多,全部手动改成utf-8 with bom过于麻烦。

于是又进行一些检索,发现有人提出类似问题的解决方案:项目->属性->配置属性->C/C+±>所有选项->附加选项->输入’/utf-8’,修改完成之后果然没有报错,但是产生大量 warning,说文件偏移地址有问题,而且编译速度极慢。

很明显这个方案也不太理想,回到最开始,明确就是文件编码的问题,怀疑是 git 过程中进行了修改。于是搜索 git 修改换行符的问题,好家伙,果然是浓眉大眼的 git 出现问题。

Windows 系统使用的换行符是 CRLF ,UNIX/LINUX 系统使用的换行符是 LF;git 是由 Linux 开发人员开发的,源码存储和 UNIX/LINUX 保持一致,换行符为 LF;GitHub 的 Windows 客户端的换行符自动转换功能默认处于“自动模式”。

当你在签出文件时,git 试图将 UNIX 换行符(LF)替换为 Windows 的换行符(CRLF);

当你在提交文件时,它又试图将 CRLF 替换为 LF。

所以结论应该就是 git 下载是没有帮我进行自动替换,打开命令行输入git config --global core.autocrlf true,再次进行下载编译,bingo,no errror!

最后,和换行符有关的命令设定如下:

    #提交时转换为LF,检出时转换为CRLFgit config --global core.autocrlf true#提交时转换为LF,检出时不转换git config --global core.autocrlf input#提交检出均不转换git config --global core.autocrlf false#拒绝提交包含混合换行符的文件git config --global core.safecrlf true#允许提交包含混合换行符的文件git config --global core.safecrlf false#提交包含混合换行符的文件时给出警告git config --global core.safecrlf warn#设置行结束符的类型为lfgit config --global core.eol lf#设置行结束符的类型为crlfgit config --global core.eol crlf#设置行结束符的类型为native, native是指平台默认的行结束符。默认的类型是nativegit config --global core.eol native

关于VS编译跨端工程出现error C2059的一个解决方案相关推荐

  1. 美团民宿跨端复用框架设计与实践

    从 PC 时代.移动时代到万物互联的 IoT 时代,伴随终端设备的日趋多样化,跨端复用的种子自此落地,开始生根发芽.从依靠容器能力.各类离线化预装包的 Hybrid 方案,到通过 JSC 连接 Jav ...

  2. C和C++混合编程(error C2059: syntax error : 'string')

    extern "C"表示编译生成的内部符号名使用C约定.C++支持函数重载,而C不支持,两者的编译规则也不一样.函数被C++编译后在符号库中的名字与C语言的不同.例如,假设某个函数 ...

  3. 一套代码编译出ios和android,Hippy: Hippy 是一个新生的跨端开发框架,目标是使开发者可以只写一套代码就直接运行于三个平台(iOS、Android 和 Web)...

    Hippy 跨端开发框架 介绍 Hippy 是一个新生的跨端开发框架,目标是使开发者可以只写一套代码就直接运行于三个平台(iOS.Android 和 Web).Hippy 的设计是面向传统 Web 开 ...

  4. 排错实战 —— 解决 c++ 工程编译错: error C2059 'string' illegal token on right side of xxx

    原总结排错vs编译错误错误列表输出窗口 排错排到编译 缘起 最近,项目里出现了一个奇怪的编译错误.乍看错误提示,真有丈二的和尚,摸不着头脑的感觉.解决之后,又是这么的合情合理.具体是什么样的问题呢?一 ...

  5. 滴滴跨端框架 Chameleon 正式支持快应用

    桔妹导读:抗击疫情,桔妹提醒大家出门带好口罩,勤洗手,多通风.武汉加油!中国加油!在大家开工之际,桔妹邀您阅读来滴滴开源专栏内容,为你分享滴滴跨端框架 Chameleon 的最新分享. 0. 目录 点 ...

  6. 干货 | 携程机票 App KMM 跨端生产实践

    作者简介 禹昂,携程移动端资深工程师,Kotlin 中文社区核心成员,图书<Kotlin 编程实践>译者. Derek,携程资深研发经理,专注于移动端开发,热衷于各种跨端技术的研究和实践. ...

  7. android 开源fc模拟器_星标 4.5K!又一个跨端框架,腾讯开源内部跨端统一开发框架:Hippy...

    点击上方"Github中文社区",关注 看遍Github好玩的项目 大家好,我是Hub哥,每天带你学习(假装了解)一个牛逼,又很碉(沙雕),又不失节操的项目. 今天我在Github ...

  8. uniapp开发实例github_跨端开发痛点?送你一款Vue最流行的跨端框架——uni-app

    前言 今天来聊一下前端必备技能--小程序开发. 从最早发布的微信小程序,到后来的支付宝小程序.字节跳动小程序.百度小程序.QQ小程序,还有最近发布的360小程序,面对这么多套的代码,开发者该如何开发呢 ...

  9. harmonyos不用jvm,关于harmonyos:DevEco-Studio-20为跨端应用高效开发设计

    12 月 16 日,万众期待的 HarmonyOS 2.0 手机利用开发者 Beta 版本在北京正式公布.与此同时,作为手机开发者 Beta 版本的配套 IDE 工具,HUAWEI DevEco St ...

最新文章

  1. cs通信查询mysql数据库_C#访问和操作MYSQL数据库
  2. 【分享】分享一款不错的网页视频播放器
  3. VS编译duilib项目时候的错误解决方法整理
  4. java数组删除数据_Java 数组 之 一维数组 删除 元素
  5. WebAPI性能优化之压缩解压
  6. 两个学习英语的好软件
  7. 陈年牵手徐静蕾之一箭双雕
  8. 晨哥真有料丨女生眼里的满分男生!
  9. 垂直导航菜单制作技巧一
  10. 电脑的ip地址经常变化_电脑网络:分分钟通俗了解网关、DNS、子网掩码、MAC地址、DHCP...
  11. 迁移 Linux 系统,第 1 部分——如何迁移备份和裸机恢复 Linux 系统
  12. spring2.5与jdk1.7冲突
  13. Clock saver for Mac(博朗手表时钟屏保)
  14. 开源协议比较:BSD、Apache、GLP、LGLP、MIT
  15. 北京玉渊潭公园第二十届樱花节
  16. linux php虚拟主机,linux上php虚拟主机(linux搭建虚拟主机)
  17. 开发一款游戏引擎需要的知识与技术
  18. Apple Swift学习资料汇总
  19. 视频教程-项目管理12个微案例-项目管理
  20. 一年365天,把1.0作为每天的能力值基础,每天原地踏步 则能力值为1.0,如果每天努力一点点则能力值提高1%,每天再努力一点则能力值提高2%,那一年后,这3种行为收获的成果相差多少呢?

热门文章

  1. screen工具使用
  2. 语音识别之HTK入门(四)——HCompV源码解析
  3. 【官方】中国工商银行电子银行业务收费标准
  4. 轮播图代码,带定时器和小圆圈(易懂)
  5. 1.无线通信:传播和衰落
  6. Linux常用基本命令详解(二)-------磁盘分区和磁盘管理类命令
  7. Nginx (一) --------- Nginx 简介
  8. Android Q的多屏幕支持
  9. 使用GDB调试Linux内核空指针问题
  10. XShell个人免费下载使用