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. }  

相关文章推荐

gcc 编译器选项

  • 2017年05月02日 11:32
  • 24KB
  • 下载

GCC编译器起步

  • 2015年06月16日 13:05
  • 1.23MB
  • 下载

Linux头文件和库文件添加环境变量与GCC编译器添加INCLUDE与LIB环境变量

对所有用户有效在/etc/profile增加以下内容。只对当前用户有效在Home目录下的 .bashrc或.bash_profile里增加下面的内容: (注意:等号前面不要加空格,否则可能出现 c...

Windows下搭建GCC编译器并配置环境变量

1.首先介绍下MinGW MinGW是指只用自由软件来生成纯粹的Win32可执行文件的编译环境,它是Minimalist GNU on Windows的略称。   实际上 ...

arm-linux-gcc交叉编译器 4.3.2 part2

  • 2014年10月13日 09:54
  • 41.07MB
  • 下载

arm-linux-gcc交叉编译器 3.4.1

  • 2014年10月13日 09:29
  • 50.39MB
  • 下载

fflush(stdin)在gcc编译器中不起作用?

====================================================================================================...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Gcc编译器
举报原因:
原因补充:

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