⑴ 什麼是編譯開關 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停止了。圖表上面會出現「哭喪的臉」: