1.å大ç¨åºç¼è¯å¨ï¼
2.Release 版本的源码程序与Debug版本的程序有什么不同?以常见的开发环境举例说明
3.gw-basic语法
4.GWD是什么格式啊?要用什么软件才能打开?
å大ç¨åºç¼è¯å¨ï¼
C++çç¼è¯å¨é½æåªäº?
kDevelopãAnjutaãCodeBlocksãVisualMingwãIdeoneãEclipseCDTãCompilrãCodeLiteãNetbeansC++ãDev?C++ã
Kdevelopæ¯ä¸ä¸ªä¸ä¸ºC/C++åå ¶ä»è¯è¨çå¼æºæ©å±æ件IDEï¼å®åºäºKDevPlatformå¹³å°ï¼è¿æ¯ä¸æ¬¾å¯ç¨äºIDEåºç¡å¼æºåºã
AnjutaDevstudioæ¯å¦å¤ä¸æ¬¾å¼ºå¤§çå¼åå·¥å ·ï¼æ¥æå è¿çç¼ç¨ç¹æ§å æ¬é¡¹ç®ç®¡çãåºç¨ç¨åºå导ã交äºå¼è°è¯å¨ãæºç ç¼è¾å¨ãçæ¬æ§å¶ï¼GUI设计ãåæå¨ççï¼è¿æ¬¾å·¥å ·ä¸ºC/C++å¼åè æä¾å¼ºå¤§çç¨æ·çé¢æ¥å£ã
CodeBlocksæ¯ä¸æ¬¾æ¯è¾æµè¡çå è´¹ä¸å¼æºçéæå¼åç¯å¢ï¼è¯¥å·¥å ·æ¥æææåè½ï¼è½å¤æ»¡è¶³å¼åè æéï¼æ¯å¦é«æçç¨æ·çé¢ãç¼è¯åè°è¯åè½çã
Visual-MigGWæ¯ä¸æ¬¾æ为ç®åçå¼æºIDEï¼å®ææçWindowsAPIé½å¯æ¥è¿è¡ç®åå¿«éçå¼åï¼å®è¿æ¯æä¸ä¸ªéæ¶å¯ç¨çåºç¨æ¡æ¶ï¼é¡¹ç®æ管å¨SourceForge.netã
Ideoneæ¯ä¸æ¬¾å¨çº¿ç¼è¾å¨åè°è¯å·¥å ·ï¼è¿æ¬¾å·¥å ·æä¾äºå¼ºå¤§çåè½ï¼å¸®å©ç¨åºå以æ´å å¿«éææçæ¹å¼ç¼è¯æºä»£ç ã
EclipseCDTæä¾æ´å é«æçåè½ï¼å¦ï¼æ¯æ为åç§å·¥å ·é¾æä¾é¡¹ç®å建å管çãæ åæ建ãæºç 导èªãåç§ç¥è¯å·¥å ·æºï¼ä»£ç ç¼è¾å¨åè½å¦é«äº®æ¾ç¤ºãæå ãè¶ é¾æ¥å¯¼èªãæºä»£ç éæ以å代ç çæï¼å¯è§åè°è¯å·¥å ·ï¼å æ¬å åãå¯åå¨ååæ±ç¼è§å¾ã
Compileræ¯ä¸æ¬¾å¨çº¿éæå¼åå·¥å ·ï¼å è®¸ä½ ç¼å令人å°è±¡æ·±å»ç代ç åè½åç®åçç¨æ·çé¢ï¼è¯¥å·¥å ·æ¯æçè¯è¨å¦CãC++ãJavaãHTMLã
Codeliteæ¯ä¸æ¬¾æ好çå è´¹å¼æºçIDEï¼å ä¹å¯è¿è¡äºææå¹³å°ã
Netbeanså·¥å ·å å«å¤ç§ç±»å模æ¿ï¼å®æ¥æ迷人çåè½ï¼ä½¿å ¶å¨Webå¼åè æ´å æµè¡ï¼æ¯å¦ï¼ä»£ç åå©ãç¼è¯é ç½®ãåå æµè¯ãæºç æ£æµãè¿ç¨å¼ååæ件导èªçåè½ã
DevC++çåè½å æ¬ï¼ç±»æµè§å¨ãéæè°è¯ãæ¯æGCCã项ç®ç®¡çã代ç ç¼è¯ãç¼è¾ä¸ç¼è¯èµæºæ件ãå·¥å ·ç®¡çãåè½æ¸ åã
windowsçpc端ç¼è¯å¨æåªäºWindowsçpc端ç¼è¯å¨æï¼
1)VisualStudio
Windowsä¸é¦å æ¨è大家使ç¨å¾®è½¯å¼åçVisualStudioï¼ç®ç§°VSï¼ï¼å®æ¯Windowsä¸çæ åIDEï¼å®é å¼åä¸å¤§å®¶ä¹é½å¨ä½¿ç¨ã为äºéåºææ°çWindowsæä½ç³»ç»ï¼å¾®è½¯æ¯éä¸æ®µæ¶é´ï¼ä¸è¬æ¯ä¸ä¸¤å¹´ï¼å°±ä¼å¯¹VSè¿è¡å级ãVSçä¸åçæ¬ä»¥åå¸å¹´ä»½å½åï¼ä¾å¦VSæ¯å¾®è½¯äºå¹´åå¸çï¼VSæ¯å¾®è½¯äºå¹´åå¸çã
ä¸è¿VSæç¹åºå¤§ï¼å®è£ å æ2~3Gï¼ä¸è½½ä¸æ¹ä¾¿ï¼èä¸ä¼å®è£ å¾å¤ææ¶ç¨ä¸å°çå·¥å ·ï¼å®è£ æ¶é´å¨å个å°æ¶å·¦å³ã
对äºåå¦è ï¼ææ¨è使ç¨VSãæ好ä¸ç¨ä½¿ç¨VSï¼æç¹ååå¦è ã
2)Dev?C++
å¦æä½ è®¨åVSçå¤ææ§ï¼é£ä¹å¯ä»¥ä½¿ç¨DevC++ãDevC++æ¯ä¸æ¬¾å è´¹å¼æºçC/C++IDEï¼å åµ?GCC?ç¼è¯å¨ï¼LinuxGCCç¼è¯å¨çWindows移æ¤çï¼ï¼æ¯NOIãNOIP?çæ¯èµçæå®å·¥å ·ãDevC++çä¼ç¹æ¯ä½ç§¯å°ï¼åªæå åå ï¼ãå®è£ å¸è½½æ¹ä¾¿ãå¦ä¹ ææ¬ä½ï¼ç¼ºç¹æ¯è°è¯åè½å¼±ã
NOIæ¯NationalOlympiadinInformaticsç缩åï¼è¯ä¸ºâå ¨å½éå°å¹´ä¿¡æ¯å¦å¥¥æå¹å ç«èµâï¼NOIPæ¯NationalOlympiadininformaticsinProvincesç缩åï¼è¯ä¸ºâå ¨å½éå°å¹´ä¿¡æ¯å¦å¥¥æå¹å èèµâãNOIãNOIPé½æ¯å¥¥æå¹å ç«èµçä¸ç§ï¼åå è å¤ä¸ºé«ä¸çï¼è·å¥è å°è¢«ä¿éå°åç大å¦æè å¾å°é«èå åèµæ ¼ã
3)VisualC++6.0
VisualC++6.0ï¼ç®ç§°VC6.0ï¼æ¯å¾®è½¯å¼åçä¸æ¬¾ç»å ¸çIDEï¼å¾å¤é«æ ¡é½ä»¥VC6.0为æå¦å·¥å ·æ¥è®²è§£CåC++ãä½VC6.0æ¯å¹´ç产åï¼å¾å¤èäºï¼å¨Win7ãWin8ãWinä¸ä¼æåç§åæ ·çå ¼å®¹æ§é®é¢ï¼çè³æ ¹æ¬ä¸è½è¿è¡ï¼æ以ä¸æ¨è使ç¨ã
VC6.0æ©å°±è¯¥æè¿åå¾æ¡¶äºï¼å¯æ¯ä¾ç¶æå¾å¤å¤§å¦æå®ä½ä¸ºæå¦å·¥å ·ï¼å¹¶ä¸éç¨çææä¹ä»¥VC6.0为åºç¡æ¥è®²è§£Cè¯è¨åC++ï¼å¯è§æå¦ä½å¶çæ端è½åï¼è¯¾ç¨ä½ç³»çæ´æ°è¿è¿è·ä¸ä¸ææ¯çè¿æ¥ã
4)å ¶å®IDE
é¤äºä¸é¢æå°çä¸æ¬¾IDEï¼Windowså¹³å°ä¸è¿æå¾å¤å ¶ä»çIDEï¼å®ä»¬åæç¹ç¹ï¼ä¾å¦ï¼
Code::Blocksæ¯ä¸æ¬¾å¼æºã跨平å°ãå è´¹çC/C++IDEï¼å®åDevC++é常类似ï¼å°å·§çµæ´»ï¼æäºå®è£ åå¸è½½ï¼ä¸è¿å®ççé¢è¦æ¯DevC++å¤æä¸äºï¼ä¸å¦DevC++æ¥å¾æ¸ ç½ã
TurboCæ¯ä¸æ¬¾å¤èçãDOS年代çCè¯è¨å¼åå·¥å ·ï¼ç¨åºååªè½ä½¿ç¨é®çæ¥æä½TurboCï¼ä¸è½ä½¿ç¨é¼ æ ï¼æ以é常ä¸æ¹ä¾¿ãä½æ¯TurboCéæäºä¸å¥å¾å½¢åºï¼å¯ä»¥å¨æ§å¶å°ç¨åºä¸ç»å¾ï¼çèµ·æ¥é常ç«é ·ï¼æ以è³ä»ä»ç¶æ人å¨ä½¿ç¨ã
C-Freeæ¯ä¸æ¬¾å½äº§çWindowsä¸çC/C++IDEï¼ææ°çæ¬æ¯5.0ï¼æ´ä¸ªè½¯ä»¶æMï¼é常轻巧ï¼å®è£ ä¹ç®åï¼çé¢ä¹æ¯DevC++æ¼äº®ãC-Freeç缺ç¹ä¹æ¯è°è¯åè½å¼±ãå¯æçæ¯ï¼C-Freeå·²ç»å¤å¹´ä¸æ´æ°äºï¼ç»ä»¶é½èäºï¼åªè½å¨XPãWin7ä¸è¿è¡ï¼å¨Win8ãWinä¸å¯è½ä¼åå¨å ¼å®¹æ§é®é¢ã
常è§çCè¯è¨ç¼è¯å¨æ¯ä»ä¹ï¼ç®åææµè¡çCè¯è¨ç¼è¯å¨æ以ä¸å ç§ï¼
1ãGNUCompilerCollectionæ称?GCC
GCCï¼GNUCompilerCollectionï¼GNUç¼è¯å¨å¥ä»¶ï¼ï¼æ¯ç±GNUå¼åçç¼ç¨è¯è¨ç¼è¯å¨ãå®æ¯ä»¥GPL许å¯è¯æåè¡çèªç±è½¯ä»¶ï¼ä¹æ¯GNU计åçå ³é®é¨åã
GCCåæ¬ä½ä¸ºGNUæä½ç³»ç»çå®æ¹ç¼è¯å¨ï¼ç°å·²è¢«å¤§å¤æ°ç±»Unixæä½ç³»ç»ï¼å¦LinuxãBSDãMacOSXçï¼é纳为æ åçç¼è¯å¨ï¼GCCåæ ·éç¨äºå¾®è½¯çWindowsãGCCæ¯èªç±è½¯ä»¶è¿ç¨åå±ä¸çèåä¾åï¼ç±èªç±è½¯ä»¶åºéä¼ä»¥GPLåè®®åå¸ã
2ãMicrosoftCæ称MSC
MicrosoftCæ¯cè¯è¨çä¸ç§IDEï¼éæå¼åç¯å¢ï¼ï¼å¸¸è§çè¿æMicrosoftVisualC++ï¼BorlandC++ï¼WatcomC++,BorlandC++ï¼BorlandC++Builder,BorlandC++3.1forDOS,WatcomC++.0forDOS,GNUDJGPPC++ï¼LccwinCCompiler3.1,HighC,TurboCçç......
3ãBorlandTurboCæ称TurboC
TurboCæ¯ç¾å½Borlandå ¬å¸ç产åï¼Borlandå ¬å¸æ¯ä¸å®¶ä¸é¨ä»äºè½¯ä»¶å¼åãç å¶çå¤§å ¬å¸ãè¯¥å ¬å¸ç¸ç»§æ¨åºäºä¸å¥Turboç³»å软件,å¦TurboBASIC,TurboPascal,TurboProlog,è¿äºè½¯ä»¶å¾åç¨æ·æ¬¢è¿ã
æ©å±èµæï¼
Cç¼è¯çæ´ä¸ªè¿ç¨å¾å¤æï¼å¤§è´å¯ä»¥å为以ä¸å个é¶æ®µï¼
1ãé¢å¤çé¶æ®µå¨è¯¥é¶æ®µä¸»è¦å®æ对æºä»£ç çé¢å¤çå·¥ä½ï¼ä¸»è¦å æ¬å¯¹å®å®ä¹æ令ï¼å¤´æ件å å«æ令ï¼é¢å®ä¹æ令åç¹æ®å符çå¤çï¼å¦å¯¹å®å®ä¹çæ¿æ¢ä»¥åæ件头ä¸æå å«çæ件ä¸é¢å®ä¹ä»£ç çæ¿æ¢çï¼æ»ä¹è¿æ¥ä¸»è¦å®æä¸äºæ¿æ¢å·¥ä½ï¼è¾åºæ¯åæºæ件å«ä¹ç¸åä½å 容ä¸åçæ件ã
2ãç¼è¯ãä¼åé¶æ®µç¼è¯å°±æ¯å°ç¬¬ä¸é¶æ®µå¤çå¾å°çæ件éè¿è¯æ³è¯æ³åæç转æ¢ä¸ºæ±ç¼è¯è¨ãä¼åå æ¬å¯¹ä¸é´ä»£ç çä¼åï¼å¦å é¤å ¬å ±è¡¨è¾¾å¼ï¼å¾ªç¯ä¼åçï¼å对ç®æ 代ç ççæè¿è¡çä¼åï¼å¦å¦ä½å åå©ç¨æºå¨çå¯åå¨åæ¾æå ³åéçå¼ï¼ä»¥åå°å å访é®æ¬¡æ°ã
3ãæ±ç¼é¶æ®µå°æ±ç¼è¯è¨ç¿»è¯ææºå¨æ令ã
4ãé¾æ¥é¶æ®µé¾æ¥é¶æ®µç主è¦å·¥ä½æ¯å°æå ³çç®æ æ件è¿æ¥èµ·æ¥ï¼å³å°å¨ä¸ä¸ªæ件ä¸å¼ç¨ç符å·å该符å·å¨å¦å¤ä¸ä¸ªæ件ä¸çå®ä¹è¿æ¥èµ·æ¥ï¼ä½¿å¾ææçç®æ æ件æ为ä¸ä¸ªè½å¤è¢«æä½ç³»ç»è£ å ¥æ§è¡çç»ä¸æ´ä½ã
åèèµææ¥æºï¼ç¾åº¦ç¾ç§-gccï¼GNUç¼è¯å¨å¥ä»¶ï¼
åèèµææ¥æºï¼ç¾åº¦ç¾ç§-MicrosoftC
åèèµææ¥æºï¼ç¾åº¦ç¾ç§-TurboC
Release 版本的程序与Debug版本的程序有什么不同?以常见的开发环境举例说明
(以VC为例)Debug通常称为调试版本,它包含调试信息,源码并且不作任何优化,源码便于程序员调试程序。源码Release称为发布版本,源码它往往是源码同花顺控盘系数指标源码进行了各种优化,使得程序在代码大小和运行速度上都是源码最优的,以便用户很好地使用。源码
Debug 和 Release 的源码真正秘密,在于一组编译选项。源码下面列出了分别针对二者的源码选项(当然除此之外还有其他一些,如/Fd /Fo,源码但区别并不重要,源码通常他们也不会引起 Release 版错误,源码在此不讨论)
Debug 版本
参数 含义
/MDd /MLd 或 /MTd 使用 Debug runtime library (调试版本的源码运行时刻函数库)
/Od 关闭优化开关
/D "_DEBUG" 相当于 #define _DEBUG,打开编译调试代码开关 (主要针对assert函数)
/ZI 创建 Edit and continue(编辑继续)数据库,这样在调试过程中如果修改了源代码不需重新编译
/GZ 可以帮助捕获内存错误
/Gm 打开最小化重链接开关, 减少链接时间
Release 版本
参数 含义
/MD /ML 或 /MT 使用发布版本的运行时刻函数库
/O1 或 /O2 优化开关,使程序最小或最快
/D "NDEBUG" 关闭条件编译调试代码开关 (即不编译assert函数)
/GF 合并重复的字符串, 并将字符串常量放到只读内存, 防止被修改
实际上,Debug 和 Release 并没有本质的界限,他们只是一组编译选项的集合,编译器只是按照预定的选项行动。事实上,我们甚至可以修改这些选项,从而得到优化过的调试版本或是带跟踪语句的发布版本。
哪些情况下 Release 版会出错
有了上面的介绍,我们再来逐个对照这些选项看看 Release 版错误是怎样产生的
1、Runtime Library:链接哪种运行时刻函数库通常只对程序的性能产生影响。调试版本的 Runtime Library 包含了调试信息,并采用了一些保护机制以帮助发现错误,因此性能不如发布版本。TypeReference源码解析编译器提供的 Runtime Library 通常很稳定,不会造成 Release 版错误;倒是由于 Debug 的 Runtime Library 加强了对错误的检测,如堆内存分配,有时会出现 Debug 有错但 Release 正常的现象。应当指出的是,如果 Debug 有错,即使 Release 正常,程序肯定是有 Bug 的,只不过可能是 Release 版的某次运行没有表现出来而已。
2、优化:这是造成错误的主要原因,因为关闭优化时源程序基本上是直接翻译的,而打开优化后编译器会作出一系列假设。这类错误主要有以下几种:
1. 帧指针(Frame Pointer)省略(简称FPO):在函数调用过程中,所有调用信息(返回地址、参数)以及自动变量都是放在栈中的。若函数的声明与实现不同(参数、返回值、调用方式),就会产生错误,但 Debug 方式下,栈的访问通过 EBP 寄存器保存的地址实现,如果没有发生数组越界之类的错误(或是越界“不多”),函数通常能正常执行;Release 方式下,优化会省略 EBP 栈基址指针,这样通过一个全局指针访问栈就会造成返回地址错误是程序崩溃。
C++ 的强类型特性能检查出大多数这样的错误,但如果用了强制类型转换,就不行了。你可以在 Release 版本中强制加入/Oy-编译选项来关掉帧指针省略,以确定是斑马网源码否此类错误。此类错误通常有:MFC 消息响应函数书写错误。正确的应为:
afx_msg LRESULT OnMessageOwn
(WPARAM wparam, LPARAM lparam);
ON_MESSAGE 宏包含强制类型转换。防止这种错误的方法之一是重定义 ON_MESSAGE 宏,把下列代码加到 stdafx.h 中(在#include "afxwin.h"之后),函数原形错误时编译会报错。
#undef ON_MESSAGE
#define ON_MESSAGE(message, memberFxn) /
{
message, 0, 0, 0, AfxSig_lwl, /
(AFX_PMSG)(AFX_PMSGW)
(static_cast< LRESULT (AFX_MSG_CALL /
CWnd::*)(WPARAM, LPARAM) > (&memberFxn)
},
2. volatile 型变量:volatile 告诉编译器该变量可能被程序之外的未知方式修改(如系统、其他进程和线程)。优化程序为了使程序性能提高,常把一些变量放在寄存器中(类似于 register 关键字),而其他进程只能对该变量所在的内存进行修改,而寄存器中的值没变。
如果你的程序是多线程的,或者你发现某个变量的值与预期的不符而你确信已正确的设置了,则很可能遇到这样的问题。这种错误有时会表现为程序在最快优化出错而最小优化正常。把你认为可疑的变量加上 volatile 试试。
3. 变量优化:优化程序会根据变量的使用情况优化变量。例如,函数中有一个未被使用的变量,在 Debug 版中它有可能掩盖一个数组越界,而在 Release 版中,这个变量很可能被优化调,此时数组越界会破坏栈中有用的数据。当然,实际的情况会比这复杂得多。与此有关的错误有非法访问,包括数组越界、指针错误等。例如:
void fn(void)
{
int i;
i = 1;
int a[4];
{
int j;
j = 1;
}
a[-1] = 1;
//当然错误不会这么明显,例如下标是变量
a[4] = 1;
}
j 虽然在数组越界时已出了作用域,但其空间并未收回,因而 i 和 j 就会掩盖越界。方块帝国源码而 Release 版由于 i、j 并未其很大作用可能会被优化掉,从而使栈被破坏。
3. DEBUG 与 NDEBUG :当定义了 _DEBUG 时,assert() 函数会被编译,而 NDEBUG 时不被编译。此外,TRACE() 宏的编译也受 _DEBUG 控制。
所有这些断言都只在 Debug版中才被编译,而在 Release 版中被忽略。唯一的例外是 VERIFY()。事实上,这些宏都是调用了assert()函数,只不过附加了一些与库有关的调试代码。如果你在这些宏中加入了任何程序代码,而不只是布尔表达式(例如赋值、能改变变量值的函数调用等),那么Release版都不会执行这些操作,从而造成错误。初学者很容易犯这类错误,查找的方法也很简单,因为这些宏都已在上面列出,只要利用 VC++ 的 Find in Files 功能在工程所有文件中找到用这些宏的地方再一一检查即可。另外,有些高手可能还会加入 #ifdef _DEBUG 之类的条件编译,也要注意一下。
顺便值得一提的是VERIFY()宏,这个宏允许你将程序代码放在布尔表达式里。这个宏通常用来检查 Windows API的返回值。有些人可能为这个原因而滥用VERIFY(),事实上这是启动雏形源码危险的,因为VERIFY()违反了断言的思想,不能使程序代码和调试代码完全分离,最终可能会带来很多麻烦。因此,专家们建议尽量少用这个宏。
4. /GZ 选项:这个选项会做以下这些事:
1. 初始化内存和变量。包括用 0xCC 初始化所有自动变量,0xCD ( Cleared Data ) 初始化堆中分配的内存(即动态分配的内存,例如 new ),0xDD ( Dead Data ) 填充已被释放的堆内存(例如 delete ),0xFD( deFencde Data ) 初始化受保护的内存(debug 版在动态分配内存的前后加入保护内存以防止越界访问),其中括号中的词是微软建议的助记词。这样做的好处是这些值都很大,作为指针是不可能的(而且 位系统中指针很少是奇数值,在有些系统中奇数的指针会产生运行时错误),作为数值也很少遇到,而且这些值也很容易辨认,因此这很有利于在 Debug 版中发现 Release 版才会遇到的错误。要特别注意的是,很多人认为编译器会用0来初始化变量,这是错误的(而且这样很不利于查找错误)。
2. 通过函数指针调用函数时,会通过检查栈指针验证函数调用的匹配性。(防止原形不匹配)
3. 函数返回前检查栈指针,确认未被修改。(防止越界访问和原形不匹配,与第二项合在一起可大致模拟帧指针省略 FPO )通常 /GZ 选项会造成 Debug 版出错而 Release 版正常的现象,因为 Release 版中未初始化的变量是随机的,这有可能使指针指向一个有效地址而掩盖了非法访问。除此之外,/Gm/GF等选项造成错误的情况比较少,而且他们的效果显而易见,比较容易发现。
怎样“调试” Release 版的程序
遇到Debug成功但Release失败,显然是一件很沮丧的事,而且往往无从下手。如果你看了以上的分析,结合错误的具体表现,很快找出了错误,固然很好。但如果一时找不出,以下给出了一些在这种情况下的策略。
1. 前面已经提过,Debug和Release只是一组编译选项的差别,实际上并没有什么定义能区分二者。我们可以修改Release版的编译选项来缩小错误范围。如上所述,可以把Release 的选项逐个改为与之相对的Debug选项,如/MD改为/MDd、/O1改为/Od,或运行时间优化改为程序大小优化。注意,一次只改一个选项,看改哪个选项时错误消失,再对应该选项相关的错误,针对性地查找。这些选项在Project/Settings...中都可以直接通过列表选取,通常不要手动修改。由于以上的分析已相当全面,这个方法是最有效的。
2. 在编程过程中就要时常注意测试 Release 版本,以免最后代码太多,时间又很紧。
3. 在 Debug 版中使用 /W4 警告级别,这样可以从编译器获得最大限度的错误信息,比如 if( i =0 )就会引起 /W4 警告。不要忽略这些警告,通常这是你程序中的 Bug 引起的。但有时 /W4 会带来很多冗余信息,如 未使用的函数参数 警告,而很多消息处理函数都会忽略某些参数。我们可以用:
#progma warning(disable: )
//禁止
//...
#progma warning(default: )
//重新允许来暂时禁止某个警告,或使用
#progma warning(push, 3)
//设置警告级别为 /W3
//...
#progma warning(pop)
//重设为 /W4
来暂时改变警告级别,有时你可以只在认为可疑的那一部分代码使用 /W4。
4. 你也可以像Debug一样调试你的Release版,只要加入调试符号。在Project/Settings... 中,选中 Settings for "Win Release",选中 C/C++ 标签,Category 选 General,Debug Info 选 Program Database。再在 Link 标签 Project options 最后加上 "/OPT:REF" (引号不要输)。这样调试器就能使用 pdb 文件中的调试符号。
但调试时你会发现断点很难设置,变量也很难找到?这些都被优化过了。不过令人庆幸的是,Call Stack窗口仍然工作正常,即使帧指针被优化,栈信息(特别是返回地址)仍然能找到。这对定位错误很有帮助。
gw-basic语法
GW-BASIC提供了一个直观且基础的集成开发环境(IDE)。每行程序代码都需要包含行号,未标注行号的语句被认为是立即执行的命令。在用户界面中,主要区域用于显示和编写源代码,只有屏幕底部的功能快捷键说明和顶部的版权声明占据部分空间。源文件通常采用GW-BASIC特有的二进制压缩格式存储,但也有ASCII文本文件格式的保存选项供开发者选择。IDE支持的命令包括RUN(执行当前代码)、LOAD(从磁盘加载代码)、SAVE(保存到磁盘)、LIST(查看源文件内容)以及SYSTEM(返回操作系统),它们都可用于代码行,但SYSTEM的用法较为罕见。 尽管GW-BASIC在结构化编程方面的支持有限,但对程序员来说,能够编写出有良好结构的程序是一个显著的进步。IF/THEN/ELSE条件语句必须在一行内书写,WHILE/WEND则允许多行代码。自定义函数采用一行语句定义,如DEF FNf(x) = 。变量类型通过后缀表示,如A$表示字符串,A%代表整数。通过DEFINT和DEFSTR等关键字,可以为一组共享首字母的变量设定默认类型。默认情况下,其他变量为单精度浮点数。 许多GW-BASIC使用者由于缺乏训练,往往忽视了结构化编程的优势,倾向于滥用GOTO语句。他们倾向于使用GOTO而非结构化的语句,这可能导致代码可读性下降,参见“面条式代码”概念。尽管如此,GW-BASIC支持游戏操纵杆和光笔输入,可以读写磁盘文件、LPT和COM端口,处理端口事件,但不支持鼠标,也无法与磁带设备交互。它通过PLAY和SOUND语句驱动IBM PC及其兼容机的内置扬声器发出声音。扩展资料
GW-BASIC是高级程序设计语言BASIC的一个方言版本。关于GW的含义,目前有三种说法,一种认为是以微软早期程序员Greg Whitten的名字命名的,一种认为是用微软创始人的名字Gates,William命名的,还有一种说法是开发人员给它取的一个戏称gee-whiz(两个英语的象声词,类似于汉语中吆喝牲口的声音)。有一点是肯定的,这个版本的BASIC最早是微软为康柏开发的,时间应该是在年,这一年月,微软首次为IBM之外的计算机厂商提供OEM版本的DOS,GW-BASIC是作为MS-DOS的一个组成部分问世的。GWD是什么格式啊?要用什么软件才能打开?
GWD是GWBasic源文件格式。要打开GWD文件,您可以使用支持GWBasic编程语言的编辑器或集成开发环境(IDE)。
GWBasic是微软公司开发的一种早期版本的Basic编程语言。GWBasic文件通常以.GWD作为文件扩展名,表示这是一个包含GWBasic源代码的文本文件。GWBasic源文件包含了程序员编写的程序代码,可以被GWBasic编译器编译成可执行文件。
要打开和编辑GWD文件,您可以使用支持GWBasic的文本编辑器或IDE。例如,您可以使用Microsoft的记事本(Notepad)来打开和查看GWD文件的内容。记事本是一个简单的文本编辑器,能够打开和显示文本文件的内容,包括GWD文件。
另外,如果您想进行更高级的GWBasic编程和开发工作,您可能需要使用支持GWBasic的集成开发环境(IDE)。IDE提供了更丰富的编程工具和功能,如代码高亮显示、代码调试器、自动完成等,可以帮助您更高效地编写和调试GWBasic代码。
需要注意的是,由于GWBasic是一种较为古老的编程语言,现在使用它的人相对较少。因此,找到支持GWBasic的编辑器和IDE可能需要一些搜索和尝试。此外,由于GWBasic的语法和特性与现代编程语言有所不同,学习和使用GWBasic可能需要一些时间和努力。
总的来说,要打开GWD文件,您可以使用支持GWBasic的文本编辑器或IDE。根据您的需求和偏好,您可以选择简单的文本编辑器如记事本,或者更高级的IDE来编辑和调试GWBasic代码。
2024-12-29 05:01
2024-12-29 04:34
2024-12-29 03:52
2024-12-29 03:48
2024-12-29 03:16
2024-12-29 03:15
2024-12-29 03:09
2024-12-29 02:55