Gcc编译器

原创 2016年08月29日 23:44:20

今天无意写了一段代码,发现了VC编译器与GUN的gcc编译器还是存在区别的。毕竟GCC支持的是标准C。

[cpp] view plain copy
  1. #include <stdio.h>  
  2.   
  3. struct Node  
  4. {  
  5.     int value;  
  6.     Node *next;  
  7. };  
  8. int main()  
  9. {  
  10.     Node a;  
  11.     a.value = 1;  
  12.     return 0;  
  13. }  

上述代码在GCC下是编译失败的,提示的错误:uknown typename 'Node'.但是放到VC编译器下则顺利编译通过。

于是按照标准C写了另外一个版本。

[cpp] view plain copy
  1. #include <stdio.h>  
  2.   
  3. struct Node  
  4. {  
  5.     int value;  
  6.     struct Node *next;  
  7. };  
  8. int main()  
  9. {  
  10.     struct Node a;  
  11.     a.value = 1;  
  12.     return 0;  
  13. }  

则通过标准C编译,因为此处Node的作用就是一个标签。除非使用typedef才可以作为类型直接使用。否则标签前面还是要加上struct关键字。

下面是使用typedef创建的类型名,但是需要定义一个标签来致命结构体内部的指针。

[cpp] view plain copy
  1. #include <stdio.h>  
  2.   
  3. typedef struct  Node1   
  4. {  
  5.     int value;  
  6.     struct Node1 *next;  
  7. }Node;  
  8. int main()  
  9. {  
  10.     Node a;  
  11.     a.value = 1;  
  12.     return 0;  
  13. }  
不过下面这种方式在GCC编译也通过

[cpp] view plain copy
  1. #include <stdio.h>  
  2.   
  3. typedef struct   
  4. {  
  5.     int value;  
  6.     struct Node *next;  
  7. }Node;  
  8. int main()  
  9. {  
  10.     Node a;  
  11.     a.value = 1;  
  12.     return 0;  
  13. }  

说明在结构体内部声明指向结构体自身的指针使用标签形式,是因为标签没有声明。在标签前面添加struct则认为此处声明是合法的一个指针,但是由于标签未声明则此指针具体指向什么类型的结构体则是不知道的,此处是有隐患的,只是通过了语法检测而已。

根据上述推测,我写了另外一个版本

[cpp] view plain copy
  1. #include <stdio.h>  
  2.   
  3. typedef struct   
  4. {  
  5.     int value;  
  6.     struct Node1 *next;  
  7. }Node;  
  8. int main()  
  9. {  
  10.     Node a;  
  11.     a.value = 1;  
  12.     return 0;  
  13. }  

VC编译器与GCC编译器的区别

今天无意写了一段代码,发现了VC编译器与GUN的gcc编译器还是存在区别的。毕竟GCC支持的是标准C。 #include struct Node { int value; Node *nex...
  • liuhuiyi
  • liuhuiyi
  • 2013年11月07日 21:52
  • 7279

在Ubuntu下安装GCC编译器及GCC编译器的基本使用命令介绍

在Ubuntu下安装GCC和其他一些Linux系统有点不一样。方法一:sudo apt-get build-depgcc方法二:sudo apt-get install build-essential...
  • oYiMiYangGuang123
  • oYiMiYangGuang123
  • 2014年08月28日 17:55
  • 1835

编译器工作原理(GCC C/C++)

源码要运行,必须先转成二进制的机器码。这是编译器的任务。 比如,下面这段源码(假定文件名叫做test.c)。 #include stdio.h> int main(void) { fp...
  • kai8wei
  • kai8wei
  • 2015年03月31日 09:34
  • 2156

Linux操作系统上安装GCC编译器过程

原文链接:http://soft.zdnet.com.cn/software_zone/2007/1118/639589.shtml
  • yuanhubilie
  • yuanhubilie
  • 2014年06月30日 15:59
  • 6003

如何使用GCC编译器

目录: GCC rules开始...预编译编译汇编连接另外两个重要选项调试小结站点链接   摘要: 要想读懂本文,你需要对C语言有基本的了解,本文将介绍如何使用gcc编译器。 ...
  • u012359618
  • u012359618
  • 2016年06月26日 19:48
  • 3341

window下使用gcc编译器

1.首先下载DEV-cpp,如下图 下载地址:http://pan.baidu.com/s/1bn3xOCZ 2.安装后配环境变量,我安装的位置是C:\Dev-Cpp,点击我的电脑--右键...
  • u012453607
  • u012453607
  • 2015年01月19日 08:58
  • 1386

vs2010编译器和Gcc

今天一下午都沉浸在痛苦与郁闷当中。 最近在
  • wangleijie1
  • wangleijie1
  • 2014年07月02日 18:26
  • 1236

我常用的gcc编译器选项

本文来小结一下我常用的gcc编译器选项:       1. gcc test.c       这个最直接, 会在当前目录下生成a.out, 然后执行./a.out就可以运行程序了。 我在玩程序的时候,...
  • stpeace
  • stpeace
  • 2015年04月24日 22:03
  • 1582

gcc编译器常用选项的含义

gcc(GNU Compiler Collection)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++、Object C、Jave等多种语言编写的程序。gcc又可以作为交叉编译工具...
  • arackethis
  • arackethis
  • 2015年02月01日 10:59
  • 1348

Win10下GCC编译器的安装与配置

在Win10下安装GCC编译器 官方下载地址 百度云地址最好不要安装在C盘! 最好不要安装在C盘! 最好不要安装在C盘! 重要的事情说三遍!!!安装完成后,在cmd下运行gcc -v就可以看...
  • lee1405990
  • lee1405990
  • 2016年06月01日 15:38
  • 12007
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Gcc编译器
举报原因:
原因补充:

(最多只允许输入30个字)