百科问答小站 logo
百科问答小站 font logo



毫无编程基础的小白准备学习C语言,用VC6还是VS2015? 第1页

  

user avatar   ninputer 网友的相关建议: 
      

地方就在不久之前,无论是VC6还是VS2015都不适合学习C语言,因为两者对C根本没有好好支持,都是针对C++的IDE。然而最近VS2015 Update 1新增了用clang作为前端的选项,它对C99有良好的支持,再加上VS方便的编辑调试体验,你终于可以享受了。

新建项目后,打开项目属性,然后在toolset中选取clang即可。

补充一下具体操作,首先你需要安装Visual Studio with Update 1,选择自定义安装,然后选中以下两项:


接下来我们只要在Visual C++的项目中即可使用clang的前端了。

实际上VC也支持大部分的C99特性,但是少数特性不支持。我们下面的例子中就有VC本身不支持的C99特性:

       #include "stdio.h"  struct point {     int x;     int y; };  /* C99特性:restrict指针提示编译器该指针是访问所指目标的唯一方式 */ static inline void swap_int(int * restrict p1, int * restrict p2) {     // 不要这样实现(C99特性://开头的注释)     *p1 = *p1 ^ *p2;     *p2 = *p1 ^ *p2;     *p1 = *p1 ^ *p2; }  /* C99特性:static inline函数 */ static inline void swap_point(struct point * p1, struct point* p2) {     swap_int(&p1->x, &p2->x);     swap_int(&p1->y, &p2->y); }  int main() {     struct point p =     {         .x = 2,         .y = 3     };      /* C99特性:复合型字面量 */     swap_point(&p,         &((struct point) { .x = -5, .y = 2 }));      printf("After swap, the point is (%d, %d)
", p.x, p.y);      if (p.y <= 0) return 0;      /* C99特性:变长数组 */     int vla[p.y];      vla[p.y - 1] = 20;     printf("The length of vla is %d
", sizeof(vla) / sizeof(int));      return 0; }       

保存为扩展名为.c的文件后,如果用VC来编译,会出现数个编译错误。这是因为restrict被VC用于C++ AMP特性了,并非C99当中的restrict指针。另外变长数组特性也是不支持的。现在我们只要打开项目属性,找到Platform Toolset这一选项,选为Clang前端+C2后端的组合:

再次编译该项目,就能完全编译通过,正确运行了!

目前的版本支持到Clang 3.7




  

相关话题

  刷完 LeetCode 是什么水平?能拿到什么水平的 offer? 
  实际工作中的 C++ 项目都是没有内存泄漏的么? 
  电脑存在“熟悉”某项任务后运行变快的情况吗? 
  不同语言代码量大致换算? 
  如果有一天代码再也不用手敲文本而可以通过图形模块化生成,那么现有的大部分程序员还要何去何从? 
  汉语编程只需要学习几十个汉字就可以编程了,外国人为什么不能汉语编程呢? 
  用C/C++开发工业软件适合吗? 
  程序员阅读源码是一种什么心态?源码对编程意义何在?如何才能更好阅读代码? 
  有哪些让你目瞪口呆的 Bug ? 
  为什么我写代码时总是手滑把main打成mian? 

前一个讨论
如果微软给 RednaxelaFX 发 Offer 让他进去做 CLR,他会同意吗?
下一个讨论
装配脑袋是谁?





© 2025-04-15 - tinynew.org. All Rights Reserved.
© 2025-04-15 - tinynew.org. 保留所有权利