C语言问题:TC与VC的不同
VC60默认编译器选项是这样的,为了优化代码的执行效率,在同一表达式连续累加的时候保持原值静态不变。你可以根据需要选择不同的编译选项。
不单是VC60,包括GNU DEV C++、G++等任何一种现代编译器,都在优化代码、优化地址空间上大做文章。你如果感兴趣,可以学习ANSI C为基础标准,每种编译器对ANSI C的实现是不一样的,即使是GNU C++,那么标准化的程序,也只实现ANSI C的97%语法标准。
对于上面的问题,有很多种解决方法:
1、不要尝试用一些很含混晦涩、不易阅读和书写的表达式,尽量以ANSI C语法为标准写;
2、如果要使用编译器特殊优化功能,请学会使用预定义和预编译选项,比如内存对齐、库函数调用:
#ifdef WIN32
#pragma pack(1)
#include <windows.h>
#else
#include <pthread.h>
#endif
这样上面的代码就可以在WINDOWS和LINUX之间兼容编译畅通无阻。
这些内容在现代C语言都很常见的,真的没什么大惊小怪。要怪就怪老师本身对现代编译器内容很少介绍,而且也太图省事,只把垃圾一样的TURBO C捧为经典。要知道TC是20年前的DOS产品,把所有问题归咎于古董而过于依赖是不对的。
虽然懒惰的老师们都应该被拖出去打屁股,但是聪明的学生应该懂得考试的时候怎么办,挣钱的时候又该怎么办。