⑴ 什么是编译开关 pascal
在编译窗口中连按两下“ctrl+o”可以在程序头中出现所有编译开关情况,也可以自己书写。
下面是一些常见开关所代表的意思:
1)数据对齐(Align Data)
{$A+}或{$A-}
在{$A+}状态下,将非字符按偶地址对齐存放,可以提高8086和80286存取数据的速度。不影响字节变量、记录域结构和数组元素。在{$A-}状态下,将使用字节对齐方式,数据可存放在奇地址或偶地址。
2)布尔运算(Boolean Evaluation)
{$B+}或{$B-}
在{$B+}状态下,编译器产生完全布尔表达式运算代码。布尔表达式中的每个操作都确保被计算。既是整个表达式的结果以确定,还继续运算其余的表达式。
在{$B-}状态下,编译器产生短路布尔表达式运算代码。接着从左到右运算,当整个表达式结果确定后,就停止运算。
3)调试信息(Debug Information)
{$D+}或{$D-}
{$D+}产生调试信息,它在编译程序或单元产生运行错误时,能自动定位引起错误的语句。
4)浮点仿真(Emulation)
{$E+}或{$E-}
{$E+}只是在8087协处理器不存在时,将连接运行库以便对协处理器进行仿真。
{$N+,$E+}状态编译程序,系统将同8087仿真器连接,得到exe文件,不管有无8087,都可以在机器上进行IEEE标准754的二进制浮点运算。
{$N+,$E-}状态下,只能在有8087时,才能进行IEEE标准754的二进制浮点运算。
8087仿真开关如果用在一个单元是无效的,它只能用于程序的编译。
5)输入输出检查(Input/Output Checking)
{$I+}或{$I-}
$I指示控制是否自动产生对调用过程的结果进行检查。
6)数字处理(Numberic Processing)
{$N+}或{$N-}
{$N-}状态,在机器上只能进行实数类型运算。在{$N+}状态,在有8087协处理器或没有用{$E+}指示对8087进行仿真,都可以对IEEE浮点类型进行运算。
7)范围检查(Range Checking)
{$R+}或{$R-}
$R+进行边界和范围检查
8)栈溢出检查(Stack Overflow Checking)
{$S+}或{$S-}
在{$S+}状态下编译,程序在每个过程或函数的开始生成一段代码,用于检查是否有足够的栈空间供局部变量使用。若栈空间不够,程序停止运行,并显示运行错误。
在{$S+}状态下这样调用会导致系统崩溃。
9)变量串检查(Var String Checking)
{$V+}或{$V-}
在{$V+}状态下,实行严格的类型检查,要求形参、实参具有同一字符串类型。
在{$V+}状态下,允许任意类型的字符串变量作为实参,甚至是一实参的最大长度不同于形参长度。
BP7下的最佳参数是:
{$A+,B-,D-,E-,F-,G+,I-,L-,N+,O-,P+,Q-,R-,S-,T-,V-,X+,Y-}
{$M 65520,0,655360}
其中D和L与调试有关,调试时必须打开这两个参数
N+可以使程序能够使用扩展实型。一般情况下,Real速度最慢,不应该使用。
在编辑环境下按Ctrl+O+O,可以自动列出默认的编译指示,然后再自己改,这样比较快
要想知道各个参数的意义,可以察看BP7的联机帮助文档
⑵ 单片机编程:#define FOSC 1843200L是什么意思#define是怎么用的
#define 在c语言中经常用到,还有类似的typedef,下面是详细的用法和说明,用好了可以节省很多函数!!
1.简单的define定义
#define MAXTIME 1000
一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写
if(i<MAXTIME){.........}
编译器在处理这个代码之前会对MAXTIME进行处理替换为1000。
这样的定义看起来类似于普通的常量定义CONST,但也有着不同,因为define的定义更像是简单的文本替换,而不是作为一个量来使用,这个问题在下面反映的尤为突出。
2.define的“函数定义”
define可以像函数那样接受一些参数,如下
#define max(x,y) (x)>(y)?(x):(y);
这个定义就将返回两个数中较大的那个,看到了吗?因为这个“函数”没有类型检查,就好像一个函数模板似的,当然,它绝对没有模板那么安全就是了。可以作为一个简单的模板来使用而已。
但是这样做的话存在隐患,例子如下:
#define Add(a,b) a+b;
在一般使用的时候是没有问题的,但是如果遇到如:c * Add(a,b) * d的时候就会出现问题,代数式的本意是a+b然后去和c,d相乘,但是因为使用了define(它只是一个简单的替换),所以式子实际上变成了
c*a + b*d
另外举一个例子:
#define pin (int*);
pin a,b;
本意是a和b都是int型指针,但是实际上变成int* a,b;
a是int型指针,而b是int型变量。
这是应该使用typedef来代替define,这样a和b就都是int型指针了。
所以我们在定义的时候,养成一个良好的习惯,建议所有的层次都要加括号。
3.宏的单行定义
#define A(x) T_##x
#define B(x) #@x
#define C(x) #x
我们假设:x=1,则有:
A(1)------〉T_1
B(1)------〉'1'
C(1)------〉"1"
(这里参考了 hustli的文章)
3.define的多行定义
define可以替代多行的代码,例如MFC中的宏定义(非常的经典,虽然让人看了恶心)
#define MACRO(arg1, arg2) do { \
/* declarations */ \
stmt1; \
stmt2; \
/* ... */ \
} while(0) /* (no trailing ; ) */
关键是要在每一个换行的时候加上一个"\
修补了几个bug
4.在大规模的开发过程中,特别是跨平台和系统的软件里,define最重要的功能是条件编译。
就是:
#ifdef WINDOWS
......
......
#endif
#ifdef linux
......
......
#endif
可以在编译的时候通过#define设置编译环境
5.如何定义宏、取消宏
//定义宏
#define [MacroName] [MacroValue]
//取消宏
#undef [MacroName]
普通宏
#define PI (3.1415926)
带参数的宏
#define max(a,b) ((a)>(b)? (a),(b))
关键是十分容易产生错误,包括机器和人理解上的差异等等。
6.条件编译
#ifdef XXX…(#else) …#endif
例如 #ifdef DV22_AUX_INPUT
#define AUX_MODE 3
#else
#define AUY_MODE 3
#endif
#ifndef XXX … (#else) … #endif
7.头文件(.h)可以被头文件或C文件包含;
重复包含(重复定义)
由于头文件包含可以嵌套,那么C文件就有可能包含多次同一个头文件,就可能出现重复定义的问题的。
通过条件编译开关来避免重复包含(重复定义)
例如
#ifndef __headerfileXXX__
#define __headerfileXXX__
…
文件内容
…
#endif
#define和typedef的区别
1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如:
#define PI 3.1415926
程序中的:area=PI*r*r 会替换为3.1415926*r*r
如果你把#define语句中的数字9 写成字母g 预处理也照样带入。
2)typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,但是You cannot use the typedef specifier inside a function definition。
3)typedef int * int_ptr;
与
#define int_ptr int *
作用都是用int_ptr代表 int * ,但是二者不同,正如前面所说 ,#define在预处理 时进行简单的替换,而typedef不是简单替换 ,而是采用如同定义变量的方法那样来声明一种类型。也就是说;
//refer to (xzgyb(老达摩))
#define int_ptr int *
int_ptr a, b; //相当于int * a, b; 只是简单的宏替换
typedef int* int_ptr;
int_ptr a, b; //a, b 都为指向int的指针,typedef为int* 引入了一个新的助记符
这也说明了为什么下面观点成立
//QunKangLi(维护成本与程序员的创造力的平方成正比)
typedef int * pint ;
#define PINT int *
那么:
const pint p ;//p不可更改,但p指向的内容可更改
const PINT p ;//p可更改,但是p指向的内容不可更改。
pint是一种指针类型 const pint p 就是把指针给锁住了 p不可更改
而const PINT p 是const int * p 锁的是指针p所指的对象。
3)也许您已经注意到#define 不是语句 不要在行末加分号,否则 会连分号一块置换。
⑶ VC中".pch"是什么文件,没有.pch文件怎么办(ZZ)
.pch文件是 用来预编译头文件用的,如果生成.pch文件,上次编译的部分头文件,下次就不用重新再编译了。
所谓的预编译头就是把一个工程中的那一部分代码,预先编译好放在一个文件里(通常是以.pch为扩展名的),这个文件就称为预编译头文件这些预先编译好的代码可以是任何的 C/C++代码--------甚至是inline的函数,但是必须是稳定的,在工程开发的过程中不会被经常改变。如果这些代码被修改,则需要重新编译生成预编译头文件。注意生成预编译头文件是很耗时间的。同时得注意预编译头文件通常很大,通常有6-7M大。注意及时清理那些没有用的预编译头文件。
编译器是以文件为单位编译的,一个文件经过修改后,会重新编译整个文件,当然在这个文件里包含的所有头文件中的东西(.eg Macro, Preprocesser )都要重新处理一遍。VC的预编译头文件保存的正是这部分信息。以避免每次都要重新处理这些头文件。
预编译头的作用:
根据上文介绍,预编译头文件的作用当然就是提高便宜速度了,没有必要每次 都编译那些不需要经常改变的代码。编译性能当然就提高了。
预编译头的使用:
要使用预编译头,我们必须指定一个头文件,这个头文件包含我们不会经常改变的代码和其他的头文件,然后用这个头文件来生成一个预编译头文件(.pch文件)StdAfx.h这个文件。这是VC提供的一个“系统级别”的,编译器带的一个头文件。其实不是的,这个文件可以是任何名字的。 典型的由AppWizard生成的MFC Dialog Based程序的预编译头文件。(因为AppWizard 会指定好如何使用预编译头文件,默认的是StdAfx.h,这是VC起的名字)。发现这个头文件里包含了以下的头文件:
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#include <afxdisp.h> // MFC Automation classes
#include <afxdtctl.h> // MFC support for Internet Explorer 4
Common Controls
#include <afxcmn.h>
这些正是使用MFC的必须包含的头文件
一个头文件是不能编译的。所以还需要一个cpp文件来生成.pch 文件。这个文件默认的就是StdAfx.cpp。在这个文件里只有一句代码就是:#include “Stdafx.h”。原因是理所当然的,仅仅是要它能够编译而已?D?D?D也就是说,要的只是它的.cpp的扩展名。可以用/Yc编译开关来指
定StdAfx.cpp来生成一个.pch文件,通过/Fp编译开关来指定生成的pch文件的名字。打 开project ->Setting->C/C++ 对话框。把Category指向Precompiled Header。在左边的树形视图里选择整个工程Project Options(右下角的那个白的地方)可以看到 /Fp “debug/PCH.pch”,这就是指 定生成的.pch文件的名字,默认的通常是<工程名>.pch(示例工程名就是PCH)。 然后,在左边的树形视图里选择StdAfx.cpp.//这时只能选一个cpp文件! 这时原来的Project Option变成了 Source File Option(原来是工程,现在是一个文件,当然变了)。在这里可以看到 /Yc开关,/Yc的作用就是指定这个文件来创建一个 Pch文件。/Yc后面的文件名是那个包含了稳定代码的头文件,一个工程里只能有一个文件的可以有YC开关。VC就根据这个选项把 StdAfx.cpp编译成一个Obj文件和一个PCH文件。
然后再选择一个其它的文件来看看,//其他cpp文件
在这里,Precomplier 选择了 Use ???一项,头文件是指定创建PCH 文件的stda fx.h 文件。事实上,这里是使用工程里的设置,(如图1)/Yu”stdafx.h”。这样,就设置好了预编译头文件。就可以使用预编译头功能了。
⑷ Eclipse经验总结——快捷键、添加库、编译开关...
Eclipse的常用操作:
(本文中涉及的运行环境一般是在linux环境中,版本是Nsight Eclipse Edition)
1.部分常用快捷键
2.打开文件夹
如果你经常需要在Eclipse里打开相关资源文件所在的文件夹,比较麻烦,要右键,属性,在Location一栏中把所在的文件夹拷贝一下,然后再去资源管理器里输入这个路径,回车,打开它。
3.打开已有的eclipse工程
file--import--existing project into workspace
4.
注意:在某一个编译环境里设置,无效尺世!要在项目里设置。
5.添加c++11支持
6.rdc-setting
Project...Properties...Build...Settings--cuda--seperate compilation
7.背景颜色
8.不检查语法/拼写错误
10.一些bug调试经验
1.创建makefile项目时 如果选卖逗择crossGCC有时候会出现报错误报(编译可以通过)的情况,如陵配肢果选择linux gcc则不会出现这种情况
⑸ Pascal编译开关。语法及作用。
网上查找保存的资料。供参考:
1)数据对齐(AlignData)
{$A+}或{$A-}
在{$A+}状态下,将非字符按偶地址对齐存放,可以提高8086和80286存取数据的速度。不影响字节变量、记录域结构和数组元素。在{$A-}状态下,将使用字节对齐方式,数据可存放在奇地址或偶地址。
2)布尔运算(BooleanEvaluation)
{$B+}或{$B-}
在{$B+}状态下,编译器产生完全布尔表达式运算代码。布尔表达式中的每个操作都确保被计算。既是整个表达式的结果以确定,还继续运算其余的表达式。
在{$B-}状态下,编译器产生短路布尔表达式运算代码。接着从左到右运算,当整个表达式结果确定后,就停止运算。
3)调试信息(DebugInformation)
{$D+}或{$D-}
{$D+}产生调试信息,它在编译程序或单元产生运行错误时,能自动定位引起错误的语句。
4)浮点仿真(Emulation)
{$E+}或{$E-}
{$E+}只是在8087协处理器不存在时,将连接运行库以便对协处理器进行仿真。
{$N+,$E+}状态编译程序,系统将同8087仿真器连接,得到exe文件,不管有无8087,都可以在机器上进行IEEE标准754的二进制浮点运算。
{$N+,$E-}状态下,只能在有8087时,才能进行IEEE标准754的二进制浮点运算。
8087仿真开关如果用在一个单元是无效的,它只能用于程序的编译。
5)输入输出检查(Input/OutputChecking)
{$I+}或{$I-}
$I指示控制是否自动产生对调用过程的结果进行检查。
6)数字处理(NumbericProcessing)
{$N+}或{$N-}
{$N-}状态,在机器上只能进行实数类型运算。在{$N+}状态,在有8087协处理器或没有用{$E+}指示对8087进行仿真,都可以对IEEE浮点类型进行运算。
7)范围检查(RangeChecking)
{$R+}或{$R-}
$R+进行边界和范围检查
8)栈溢出检查(StackOverflowChecking)
{$S+}或{$S-}
在{$S+}状态下编译,程序在每个过程或函数的开始生成一段代码,用于检查是否有足够的栈空间供局部变量使用。若栈空间不够,程序停止运行,并显示运行错误。
在{$S+}状态下这样调用会导致系统崩溃。
9)变量串检查(VarStringChecking)
{$V+}或{$V-}
在{$V+}状态下,实行严格的类型检查,要求形参、实参具有同一字符串类型。
在{$V+}状态下,允许任意类型的字符串变量作为实参,甚至是一实参的最大长度不同于形参长度。
//以上内容照抄自网络,下面是原创的
10)复制文件中的内容(IncludeFile)
{$I}
格式:{$Iabc.inc}
作用就相当于abc.inc中所有的东西抄到这个位置。
12)隐藏控制台(GUIapplication)
{$APPTYPEGUI}
就是这样,在程序的开头加上,可以隐藏控制台。
13)扩大栈容量
{$M100000000,0,MaxLongint}
在使用上面的指令后,可以使用AnsiString类型。
{$M$4000,0,0}
在使用上面的命令后,再使用DOS单元。否则可能出现错误。
14)定义符号(Defineasymbol)
格式:{$define标示符}
对下面这些指令有用:
15)如果定义XXX,那么……(ifdefineXXX...)
格式:{$ifdef符号标示符}
语句;
{$endif}
如果用$define定义了,那么就会执行下面到$endif的语句。
16)ifdef的另一种用法(else...)
格式:{$ifdef符号标示符}
语句1;
{$else}
语句2;
{$endif}
若果定义了XXX就执行语句1,否则执行语句2。
17)取消定义
格式:{$undef标示符}
取消定义某个标示符,和$define搭配使用。
//以上是我自己研究或者总结的,下面是帮助文件原文:
Localcompilerswitches
cmdshortlongexplanation
$A$ALIGNAlignData.
A$ASMMODESelectassemblermode.
$B$.
Sa$C$.
$
d$DEFINEDefineasymbol.
$.
$.
$ERRORGenerateerrormessage.
$FUsefarornearfunctions.
$.
Sg$GOTOSupportGotoandLabel.
$H$LONGSTRINGSUseAnsiStrings.
$HINTGeneratehintmessage.
vh$HINTSEmithints
$IFStartconditionalcompilation.
$.
$.
$.
$INFOGenerateinfomessage.
Si$INLINEEnableinlinecodesupport.
Ci$I$IOCHECKSIncludeInput/Outputchecking.
$I$INCLUDEIncludele.
$I$INCLUDEIncludecompilerinfo.
$L$LINKLinkobjectle.
$LINKLIBLinktoalibrary.
$M$TYPEINFOGenerateRun-Timetypeinformation.
Sm$MACROEnablemacrosupport.
$
$MESSAGEGenerateinfomessage.
$MMXEnableIntelMMXsupport.
$NOTEGeneratenotemessage.
vn$NOTESEmitnotes.
A$.
$P$OPENSTRINGSUseopenstrings.
$.
$.
Co$Q$OVERFLOWCHECKSUseover
owchecking.
Cr$R$RANGECHECKSUserangechecking.
$.
XX$SMARTLINKUsesmartlinking.
St$.
$STOPGeneratefatalerrormessage.
$T$.
u$UNDEFUndeneasymbol.
$V$VARSTRINGCHECKSUsestrictvar-stringchecking.
$WAITWaitforenterkeypress.
$WARNINGGeneratewarningmessage.
$WARNINGSEmitwarnings.
$X$
$APPIDSetapplicationID(PalmOS)
$APPNAMESetapplicationname(PalmOS)
$(Windowsonly)
g$D$.
$DESCRIPTIONNotsupported.
$EEnableemulationofcoprocessor.
$GGenerate80286code.
Fi$.
$L$.
Fl$.
$M$MEMORYSpecifymemorysizes.
M$.
$NEnablenumericprocessing.
$OEnableoverlaycodegeneration.
Fo$.
Ct$SUsestackchecking
Fu$.
$VERSIONSetDLLversion(Windows)
$W$.
b$Y$.
⑹ define的用法
有三种用法,例如替代多行的代码、条件编译,还有典型的宏定义,具体如下:
1、define最重要的用法是条件编译
#ifdef WINDOWS
......
......
#endif
#ifdef LINUX
......
......
#endif
可以在编译的时候通过#define设置编译环境
2、典型的使用方法
使用宏定义我们可以自己根据自己的习惯来定义甚至改变C语言的语法习惯,例如:
#defineBEGIN {
#defineEND }
int main()BEGIN
printf ("DEFINE---- ");
定义一个循环
#define LOOP for(;;)
重新定义数据类型
#define IT int
3、define可以替代多行的代码,在每一个换行的时候加上一个""
#define MAX(X,Y) do {
语句1;
语句2;
/* 注释的写法 */
} while(0) /* (no trailing ; ) */
(6)编译开关怎么用扩展阅读:
参数
#define GPEBLT_FUNCNAME(basename) (SCODE (GPE::*)(struct GPEBltParms *))&GPE::##basename
在#define中,标准只定义了#和##两种操作。#用来把参数转换成字符串,##则用来连接前后两个参数,把它们变成一个字符串。
#include<stdio.h>
#definepaster(n)printf("token"#n"=%d ",token##n)
intmain(void)
{
inttoken9=10;
paster(9);
return0;
}
输出为:token 9 = 10
⑺ c语言编译tc2.0怎么用
拷贝一些给你,一般编译器要注意的就是include目录和lib目录,还有就是编译器调用的tcc,tlink之类的要在路径内。不过简单的菜单还是学一下吧,学编程还是需要一些英语的。
⒈首先要确保名为turboc.CFG的文件与TCC.EXE位于同一
目录下如同在C:\TC目录下。turboc.CFG的全部内容是
-IC:\TC\INCLUDE
-LC:\TC\LIB
它的作用是告诉TCC.EXE,.h文件和.lib文件在哪里。
⒉最简单的情形——当只需要编译连接一个C源文件
设含主函数main()的文件名为mfile.c(下同)
则用以下命令之一可使编译、连接"一步到位":
① tcc -f87 mfile.c <回车>
② tcc mfile.c <回车>
③ tcc mfile <回车>
命令①的效果优于命令②③因为 -f87 启动了协处理器
从而使最终得到的可执行文件mfile.exe代码短,速度快
命令②③的效果是用软件仿真协处理器的8087指令代码
既长速度且慢。当然如果机器上没有协处理器就只能采
用命令②或③了。若源文件的扩展名是c,则只须输入文
件的主名,小数点和'c'一并省略,故命令②③效果相同
【注】如果C源文件的扩展名不是c,则又分两种情况:
若无扩展名(例如:仅有主名mfile)则编译连接命令应为
tcc -f87 mfile. <回车>
别忘了末尾那个小数点!
若有扩展名(例如:mfile.cpp)则编译连接命令应为
tcc -f87 mfile.cpp <回车>
⒊较复杂的情形——数个C源文件编译后连接为一个程序
设除了源文件mfile.c外,还有1.sub和2.fun两个源文件
则此时"一步到位"的既编译又连接的命令如下:
tcc [-f87] mfile[.c] 1.sub 2.fun <回车>
以上含方括号[]的项表示可选择项(下同)。该命令的效
果是顺序编译这些C源文件因而先后生成以下目标文件
mfile.obj,1.obj,2.obj 随后连接并生成 mfile.exe
换言之以上命令的效果等价于下面所列命令序列的效果
tcc -c mfile[.c] <回车>
tcc -c 1.sub <回车>
tcc -c 2.fun <回车>
tcc [-f87] mfile.obj 1.obj 2.obj <回车>
应当指出:-f87 开关对于编译不起作用,但在连接阶段
将引导连接器TLINK.EXE与库文件 C:\TC\LIB\FP87.LIB
连接而不是缺省时的模拟库文件 C:\TC\LIB\EMU.LIB。
⒋更复杂的情形——C主文件和汇编模块连接为一个程序
设除源文件mfile.c外,还有汇编模块sub.asm和fun.asm
此时"一步到位"的既编译、汇编又连接的命令如下:
tcc [-f87] -B mfile[.c] sub.asm fun.asm <回车>
以上命令的效果等价于下面所列命令序列的效果:
tcc -c mfile[.c] <回车>
tasm -Mx sub[.asm] <回车>
tasm -Mx fun[.asm] <回车>
tcc [-f87] mfile.obj sub.obj fun.obj <回车>
⒌内存模式——Tiny,Small,Compact,Medium,Lagre,Huge
对应的开关是 -mt, -ms(缺省), -mc, -mm, -ml, -mh
注意该开关对于编译和对于连接都是有意义的。例如:
tcc -ml mfile[.c] <回车>
等价于这样2条命令:
① tcc -ml -c mfile[.c] <回车>
② tcc -ml mfile.obj <回车>
命令①中的 -ml 告诉编译器:代码和数据都是"远"的。
命令②中的 -ml 告诉连接器:连接MATHL.LIB和CL.LIB
⒍混合模式编程。例如:总体上是SMALL模式,但希望调用
按LARGE模式编写的函数。这是可以做到的,关键在函数
声明语句要强调代码和数据的 far 属性。 有这样一个
具体例子。在MS-Fortran4.0的库LLIBFR7.LIB中有个名
为CIXTOMX.OBJ的模块,其中定义了4个"远"函数。用C
语言编程调用这4个函数的关键是正确的函数原型声明
extern void far fmsbintoieee(float far*,float far*);
extern void far dmsbintoieee(double far*,double far*);
extern void far fieeetomsbin(float far*,float far*);
extern void far dieeetomsbin(double far*,double far*);
这样声明后,即使用 -ms 进行编译连接也能正常运行。
完整的程序见 D:\FOR4.0\ 目录下的
MS.C,CIXTOMX.OBJ,IXTOMX.OBJ,MS.EXE,ML.C,ML.EXE。
⒎连接阶段如何用TLINK.EXE完成。对于
tcc -f87 mfile.obj sub.obj fun.obj <回车>
在缺省的SMALL模式下也可以用以下命令实现连接:
TLINK c0S mfile sub fun,mfile,nul,maths fp87 cs <回车>
同理对于
tcc -ml mfile.obj sub.obj fun.obj <回车>
则相当于执行下列命令:
TLINK c0L mfile sub fun,mfile,nul,maths emu cs <回车>
其中启动代码即C的初始化程序C0S.OBJ或C0L.OBJ可以
在C:\TC\LIB\下找到,它们的源程序在C:\TC\STARTUP\
目录下——该目录中的MAIN.C程序也值得关注。
⑻ 如何用metatrader自带的编辑器metaeditor编译
1.首先,你要有一个EA,必须要有以ex4为扩展名的,如果只有mq4文件的话,就要用MetaTrader自带的编辑器MetaEditor打开(主菜单命令“工具—MQ语言编辑器”或者是快捷键F4完成同样操作),将mq4通过编译(compile)并且要不出现错误,才能在原存放mq4的文件夹下面得到一个同名的ex4文件。
2.将这个ex4文件复制到MetaTrader
4所在的文件夹下面的experts文件夹下,比如:C:\Program Files\FxPro
MetaTrader\experts,关闭并重新打开MetaTrader 4。
3.在“导航”下面的“智能交易系统”下面右键点击你想要使用的EA,这里以10点盈利系统举例,点“附加到图表”,如:
4.将会出现下面的弹出窗口:
特别要注意这里的选择,如果没有钩选“允许实时自动交易”,那么你的智能系统就不会自动交易。
5.在自动成交方面,MT4还有一个总开关,就是“工具”菜单下面的“选项”中:
6.还有一个地方必须选择“启动”:
上图最后面的变成这样的就是已经启动了智能交易系统。
7.在完成了上面的所有设置后,看看你的图表的右上角一定会出现你的智能交易系统的文件名和一个笑脸。
出现这样就算是当前的图表已经启用了智能交易系统了。这时,你就可以去睡觉或者去喝酒喝茶健身了。
8.如果你要停止你的智能交易系统,最好的办法是点击这个图上面的“智能交易”图标。
如果只要停止当前图表上面的EA,你应该按 F7
键,就会弹出如下的窗口:
点击将“允许实时自动交易”前面的钩去掉,然后确定,这样就使当前图表上面的EA停止了。图表上面会出现“哭丧的脸”: