`
googya
  • 浏览: 143357 次
  • 性别: Icon_minigender_1
  • 来自: 汉川
社区版块
存档分类
最新评论

vc下的编译器和gcc编译器在编译时的一点小区别

阅读更多
    今天一位童靴给我了如下的代码:
#include<stdio.h>
main()
{
	int b=3;
	int arr[]={6,7,8,9,10};
	int *ptr=arr;
	*(ptr++)+=128;
	printf("%d,%d\n",*ptr,*(ptr++));
}


问我输出的结果是什么以及原因。我告诉他是8,7.他觉得很吃惊,因为他在vc++下编译的,执行的结果是 7,7,我试了一下,在vc下果然是7,7,我猜想大概是程序printf函数中的参数执行的顺序的问题,在gcc中是从右往左,vc++里面出现这样的结果,其顺序应该是从左往右。原以为事情到此应很清楚了,就是执行的顺序问题。

    可是麻烦问题又来了。假设在vc++里面的顺序是从左至右,那么下面代码的结果应该是7,8

#include<stdio.h>
main()
{
int b=3;
int arr[]={6,7,8,9,10};
int *ptr=arr;
*(ptr++)+=128;
printf("%d,%d\n",*ptr,*(++ptr));

}

可是,在vc下执行的结果是 8,8.这点就让人比较费解了啊,按照从左至右的顺序,结果应该是7,8。
    那么这可能是编译器的不同所导致的问题。只是个人觉得vc++处理得似乎不够一致。
    也没有多大的意义,只是备忘,免得以后自己也陷进去了。
    也可能是微软超越了执行顺序的问题,只是我还不理解它所采用方法的机制罢了

1
0
分享到:
评论
2 楼 googya 2010-09-09  
hamo2008 写道
你都错了,这不是从左到右还是从右到左的问题。你的printf只是一条语句,++ptr在这条语句前执行,ptr++在这条语句后执行。




你说的规则确实存在,但不是在这个地方不适用,知道为什么么?看来你确实没有懂我说的意思。按照你的这种说法,
#include<stdio.h>
main()
{
	int b=3;
	int arr[]={6,7,8,9,10};
	int *ptr=arr;
	*(ptr++)+=128;
	printf("%d,%d\n",*ptr,*(ptr++));
}


执行的结果是什么?我告诉你是 8,7!

事情不是你想象的中的那样简单
1 楼 hamo2008 2010-09-09  
你都错了,这不是从左到右还是从右到左的问题。你的printf只是一条语句,++ptr在这条语句前执行,ptr++在这条语句后执行。

相关推荐

    可在windows下使用的gcc编译器

    标题中的“可在windows下使用的gcc编译器”指的是在Windows操作系统环境下运行的GNU Compiler Collection(GCC)编译器。GCC是开源的、跨平台的编译器,它支持多种编程语言,包括C、C++、Objective-C、Fortran、Ada...

    VC 2010编译器

    【VC 2010 编译器】是微软Visual Studio 2010集成开发环境中的关键组件,主要用于编写和构建C++应用程序。在编程过程中,编译器扮演着至关重要的角色,它将程序员书写的源代码转换为可执行程序。在VS2010中,C++...

    编译原理C编译器实现

    C语言编译器的实现涉及多种技术,本资源提供了两个C++和VC实现的C编译器源代码,以及一个早期版本的GCC 1.42。GCC(GNU Compiler Collection)是广泛使用的开源编译器套件,其1.42版本相对简单,适合初学者学习。 1...

    GCC编译器-GUN Complier Complier

    在描述中提到的"GCC编译器-GUN Complier Complier 安装包"可能是指一个包含GCC编译器及其相关工具的分卷压缩文件,如`gccgdb.part1.rar`、`gccgdb.part2.rar`和`gccgdb.part3.rar`。这些文件通常需要按照顺序解压...

    gcc-4.4.0 c语言最好的编译器 ansii c 覆盖率98%。也含有c++编译器

    虽然GCC和Visual C++都是C++编译器,但它们的语法实现和编译选项可能有所不同,开发者在使用时需要根据具体需求选择合适的工具。 在压缩包的文件名称列表中,我们看到“man”通常包含编译器的手册页,这些手册页...

    modelsim/questasim-gcc-4.5.0-mingw64编译器

    GCC 4.5.0版本是一个较旧但稳定的版本,它在编译和链接C++代码时能很好地处理一些特定的语法和特性,这些在UVM库中可能被用到。 接下来,让我们详细阐述编译过程: 1. **安装mingw64**:首先,你需要下载并安装...

    Windows上的GCC编译器

    Windows上的GCC编译器,很实用,虽然兼容性没有微软的好,但微软IDE是收费的,编译器命令也是看不见的。这个编译器很好用,部分Win32 API可能会出问题,编译器环境变量已配置好,直接运行StartStinging.bat用编译...

    modelsim-gcc-4.2.1-mingw32vc9.zip

    总结来说,"modelsim-gcc-4.2.1-mingw32vc9.zip"是一个专为32位Modelsim和Questasim设计的GCC编译器集成包,提供了在Windows环境下用GCC编译和调试HDL代码的能力。这极大地扩展了仿真器的功能,使得开发者可以利用...

    modelsim-gcc-4.5.0-mingw64

    在压缩包文件"gcc-4.5.0-mingw64"中,包含了GCC 4.5.0在Mingw64平台上的完整编译器和相关工具链。这些工具不仅包括了编译器本身,还有链接器、汇编器以及其他必要的构建工具,如make、ar等,它们共同构成了一个完整...

    封装得比较完整的串口类接口,支持同步、异步操作,具有工业强度,我在BC, BCB, VC, BCBX, GCC下编译通过.rar

    该串口类库能在这些不同的编译器下通过编译,意味着它的源代码遵循了良好的编码规范,没有依赖特定编译器的特性,具备良好的移植性。 描述中提到的“同步、异步操作”是指串口通信的两种主要工作模式。同步操作通常...

    nvcc编译器配置——实用详细步骤

    NVCC编译器是NVIDIA公司为CUDA编程提供的专用C/C++编译器,它能够将CUDA源代码转换为可以在GPU上执行的可执行文件。本文将详细介绍如何配置NVCC编译环境,以便在Visual Studio 2005中顺利进行CUDA开发。 一、设置...

    VC++6.0编译器(命令行)

    没有命令行编译经验如cl, nmake,gcc等的最好不要下。高手一定要下!初学者推荐下!体积19.2MB 从Microsoft Visual Studio 6.0中Ripper出来的VC++编译器,花了很多精力测试它,成功!(配合ActivePerl编译openssl-...

    MinGW 4.5.0 编译器

    MinGW 4.5.0 是这个项目的一个版本,包含了C和C++的编译器,使得开发者能够在Windows环境下编写、编译和运行C和C++程序。 安装MinGW 4.5.0首先需要下载其对应的压缩包,解压缩后,文件夹通常命名为“mingw”。在...

    opencv编译好的库,用于win7的GCC编译器

    在本资源中,提供的是预编译好的OpenCV 2.4.9版本,特别为Windows 7系统设计,适用于使用GCC编译器的开发环境,如Code::Blocks。这个库文件不适用于Visual C++(VC)环境,因此,如果你习惯于使用Visual Studio等IDE...

    Windows(Win10/8/7)环境GCC编译器

    Windows(Win10/8/7)环境下配置GCC编译器,替代不可使用的VC6.0,搭配Notepad++等编辑器构建C语言编译环境,使用方法http://blog.csdn.net/fuyanhuangyan/article/details/78587548

    LCC编译器VC源码包

    在学习和使用LCC编译器时,有以下几个关键知识点: 1. **编译器原理**:LCC编译器展示了如何将高级语言如C转换为机器语言的过程,包括词法分析、语法分析、语义分析和代码生成等步骤。通过阅读源码,可以了解这些...

    C-Free配置TDM-GCC/MinGW-w64/VC++2015编译器教程

    **C-Free配置TDM-GCC/MinGW...通过以上步骤,你可以在C-Free中灵活切换和使用TDM-GCC、MinGW-w64和VC++ 2015,享受更加高效和现代的编译体验。在编程学习和实践中,不断探索和适应不同的工具是提高技术水平的重要途径。

    lcc42_vc6_编译器_英特尔_

    标题 "lcc42_vc6_编译器_英特尔_" 指的是一个与英特尔编译器相关的项目,特别提及了它与Visual C++ 6(VC6)的兼容性。这个项目可能是一个古老的编译器版本,适用于早期的Windows开发环境。在描述中提到,这个资源...

    Windows 平台的64位 GCC 编译器

    快来体验MinGW64 for Windows 64,即x86_64-w64-mingw32,这是 GCC 在 Windows 平台上的移植,和 Cygwin 不一样,该工具使用的是 VC 的运行时,可以和 VC++ 无缝调用,而不依赖于其他 dll. 目前版本 4.7.0 ,该发布...

    如何避免编译器差别带来的错误

    在编程世界中,不同的编译器可能导致代码在不同环境下表现不一致,特别是在参与ACM(国际大学生程序设计竞赛)或类似的信息学竞赛时,这个问题尤为突出。为了确保代码的跨平台兼容性和正确性,理解并避免编译器差异...

Global site tag (gtag.js) - Google Analytics