伊隆哥語翻譯

(1).變量一般不要界說在.h文件中。

還是把頭文件的內容都放在#ifndef和#endif中吧翻譯不管你的頭文件會不會被多個文件引用,你都要加上這個。一般花式是這樣的:

#endif

(1).當你第一個使用這個頭的.cpp文件生成.obj的時辰,int i 在裡面界說了當別的一個利用這個的.cpp再次[零丁]生成.obj的時候,int i 又被界說然後兩個obj被別的一個.cpp也include 這個頭的,毗連在一路,就會呈現反複定義.

2.在#ifndef中界說變量泛起的問題(一般不界說在#ifndef中)。

解決方式:

結論:

#ifndef AAA
#define AAA
...
int i;
...
#endif
裡面有一個變量界說
在vc中鏈接時就泛起了i重複界說的錯誤,而在c中成功編譯。

(1).把源法式文件擴展名改成.c翻譯

<標識>在理論上來說可以是自由定名的,但每一個頭文件的這個「標識」都應當是獨一的。標識的定名法則通常爲頭文件名全大寫,前後加下劃線,並把文件名中的「.」也變成下劃線,如:stdio.h

感化規模就是當前文件啊。因為編譯是以cpp或c文件位單元的嘛。還以這個為例:

//正常代碼
#ifdef _DEBUG
     TRACE("Some infomation");
#else
     //Now is release version,so do nothing
#endif
//正常代碼

編譯時是先把所有的預編譯處置睜開(比如宏)再編譯,所以Debug模式下,編譯時的代碼是:
//正常代碼
TRACE("Some infomation");
//正常代碼

Release模式下的代碼是:
//正常代碼
//正常代碼

一般情形下,源法式中所有的行都加入編譯。可是有時但願對此中一部份內容只在知足一定前提才進行編譯,也就是對一部門內容指定編譯的前提,這就是「前提編譯」。有時,但願當知足某前提時對一組語句進行編譯,而當條件不知足時則編譯另一組語句。
前提編譯號令最多見的情勢為:
    #ifdef 標識符
    程序段1
    #else
    程序段2
    #endif
    
    它的感化是:當標識符已經被界說過(通常爲用#define號令界說),則對法式段1進行編譯,不然編譯程序段2。
    個中#else部分也能夠沒有,即:
    #ifdef
    程序段1
    #denif
    
    這裡的「法式段」可所以語句組,也能夠是饬令行翻譯這種條件編譯可以提高C源法式的通用性。如果一個C源法式在分歧計較機系統上系統上運行,而分歧的計較機 又有一定的差別翻譯例如,華頓翻譯公司們有一個數據類型,在Windows平台中,應該使用long類型表示,而在其他平台應當利用float透露表現,如許常常需要對源 法式作需要的點竄,這就下降了程序的通用性。可以用以下的前提編譯:
    #ifdef WINDOWS
    #define MYTYPE long
    #else
    #define MYTYPE float
    #endif
    
    若是在Windows上編譯法式,則可以在法式的起頭加上
    #define WINDOWS
    
    如許則編譯下面的敕令行:
    #define MYTYPE long
    
    假如在這組條件編譯號令之前曾呈現以下號令行:
    #define WINDOWS 0
    
    則預編譯後法式中的MYTYPE都用float代替翻譯這樣,源法式可以不必作任何點竄就能夠用於分歧類型的計較機系統。固然以上介紹的只是一種簡單的環境,可以憑據此思緒設計出其它的條件編譯翻譯
    例如,在調試法式時,經常但願輸出一些所需的信息,而在調試完成後不再輸出這些信息。可以在源法式中插入以下的前提編譯段:
    #ifdef DEBUG
    print ("device_open(%p) "翻譯社 file);
    #endif
    
    如果在它的前面有以下命令行:
    #define DEBUG
    
    則在法式運行時輸出file指針的值,以便調試分析。調試完成後只需將這個define敕令行刪除便可。有人可能感覺不消前提編譯也可達此目標,即在調試 時加一批printf語句,調試後逐一將printf語句刪除去。的確,這是可以的。但是,當調試時加的printf語句比較多時,點竄的工作量是很大 的翻譯用前提編譯,則沒必要逐一刪改printf語句,只需刪除前面的一條「#define DEBUG」號令便可,這時候所有的用DEBUG作標識符的條件編譯段都使個中的printf語句不起作用,即起同一節制的感化,猶如一個「開關」一樣。
    有時也採用下面的情勢:
    #ifndef 標識符
    法式段1
    #else
    法式段2
    #endif
    
    只是第一行與第一種形式分歧:將「ifdef」改為「ifndef」。它的作用是:若標識符未被界說則編譯法式段1,不然編譯法式段2翻譯這種情勢與第一種形式的感化相反。
    以上兩種情勢用法差不多,按照需要任選一種,視便利而定。
    還有一種情勢,就是#if後面的是一個表達式,而不是一個簡單的標識符:
    #if 表達式
    法式段1
    #else
    法式段2
    #endif
    
    它的感化是:當指定的表達式值為真(非零)時就編譯程序段1,不然編譯程序段2。可以事前給定必然前提,使法式在不同的條件下履行不同的功能翻譯

#ifndef <標識>
#define <標識>

---------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------------

<x.h>
#ifndef __X_H__
#define __X_H__
extern int i;
#endif //__X_H__
<x.c>
int i;

......

(2).把源法式文件擴展名改成.c後,VC依照C說話的語法對源法式進行編譯,而不是C++翻譯在C說話中,若是碰到多個int i,則主動認為個中一個是界說,其他的是聲明翻譯

#endif

(2).推薦解決方案:
.h中只聲明 extern int i;在.cpp中定義

文件中的#ifndef

頭件的中的#ifndef,這是一個很要害的東西翻譯好比翻譯公司有兩個C文件,這兩個C文件都include了統一個頭文件。而編譯時,這兩個C文件要一同編譯成一個可運行文件,於是問題來了,大量的聲明衝突。

 

[轉] #ifndef#define#endif的用法(清算)    原作者:icwk 

(3).C語言和C++說話連接成果分歧,可能(猜想)時在進行編譯的時刻,C++語言將全局
變量默許為強符號,所以連接失足。C說話則遵照是不是初始化進行強弱的判定的。(參考)

......
......

注意問題:

#ifndef _STDIO_H_
#define _STDIO_H_



本文來自: http://huenlil.pixnet.net/blog/post/24339151-%5B%E8%BD%89%5D%23ifndef,-%23define,-%23endif%E7%9A%84%有關各國語文翻譯公證的問題歡迎諮詢華頓翻譯公司02-77260932

arrow
arrow
    文章標籤
    翻譯社
    全站熱搜
    創作者介紹
    創作者 webbtng7q04j3 的頭像
    webbtng7q04j3

    這裡是和華碩翻譯有關的地盤,歡迎到訪我的BLOG!