導航:首頁 > 源碼編譯 > 兩個源文件怎麼防止重復編譯

兩個源文件怎麼防止重復編譯

發布時間:2022-09-12 20:41:42

『壹』 VC如何解決重復包含頭文件的問題

語法上對頭文件里的內容沒有任何限制

c++語法有個要求就是任何名字(類型、變數或者函數什麼的)都要「先聲明後使用」,注意這個要求的范圍是在同一個文件里,就是說你這個.cpp里用到的東西必須在你這個.cpp里先有聲明。 如果你要用string類的變數, 你就必須先寫清楚這個類型的聲明,編譯器才知道怎麼去編譯這一段。 所以你要是不怕累的話你可以就挨個用到的地方重復寫一下,但是因為這個可能很麻煩, 也可能會幾個地方寫的不一致, 解決辦法就是採用一個頭文件,每個地方都include這個頭文件, 就相當於寫了這個類型的聲明。 include命令的作用就是把那個頭文件的內容復制到這里來, 至於頭文件裡面到底寫了什麼其實是沒有語法要求的,但是如上所述, 頭文件既然主要是解決這個聲明的問題, 所以當然你看到的頭文件里主要內容還都是聲明。 現在模板橫行的時候由於一些技術問題造成頭文件里也寫了很多實現, 這個解釋起來有點麻煩,你可以不搭理它

所以總結一下, C語言要求先聲明後使用,所以用頭文件來形成一個統一聲明, 而之所以要防止重復include頭文件,是因為一個cpp里一個名字是不可以被定義多次的, 所以對那些聲明=定義的東西如果重復include了,編譯的時候就容易出現重復定義的錯誤,當然對有些聲明跟定義截然分開的情況來說,重復include也沒問題

『貳』 兩個源文件都包含了同一個頭文件,但是已經做了防止重復包含的處理,為啥還是沖突呢

這不是重復包含的問題。
發生沖突的是變數。頭文件里提供變數的聲明就行,定義放在cpp文件里。比如int stuNum = 0;
你把這句寫在main.cpp里,然後在main.h里加上extern int stuNum;
帶上初始化的只能是定義,所以引用了兩次頭文件之後,就產生了兩個定義,就會導致符號沖突。

『叄』 C 語言中多文件編譯的問題

如果有多個源文件,基本上有兩種編譯方法:
[假設有兩個源文件為test.c和testfun.c]
1.
多個文件一起編譯
用法:#gcc
testfun.c
test.c
-o
test
作用:將testfun.c和test.c分別編譯後鏈接成test可執行文件。
2.
分別編譯各個源文件,之後對編譯後輸出的目標文件鏈接。
用法:
#gcc
-c
testfun.c
//將testfun.c編譯成testfun.o
#gcc
-c
test.c
//將test.c編譯成test.o
#gcc
-o
testfun.o
test.o
-o
test
//將testfun.o和test.o鏈接成test
以上兩種方法相比較,第一中方法編譯時需要所有文件重新編譯,而第二種方法可以只重新編譯修改的文件,未修改的文件不用重新編譯。

『肆』 c語言如何避免重復包含頭文件

#include 通常不會包含 .cpp 文件,如果包含的話,一般僅會包含如 static 的函數這樣不會因為多次包含而導致鏈接問題的。
為了防止重復包含,頭文件中都會有相應的處理,比如加上
#ifndef _STDIO_H_
#define _STDIO_H_
// 真正的頭文件內容

#endif
這樣在多次包含的時候,因為已經定義了 _STDIO_H_,所以第二次包含的內容會被忽略。
比較新的 C++ 編譯器也支持 #pragma once,這樣只要在頭文件開頭寫上這一句,編譯器就會在處理頭文件的時候不包含多次了。

『伍』 建立兩個C++源程序,先打開第一個,編譯運行後,再打開第二個進行編譯運行,會出現什麼問題原因

會出現main already defined in Cpp1,one or more multiply defined symbols found,編譯不會出錯,但是組建就會出現上述情況,有1個或更多的主函數發現,但是只允許一個main函數,要在文件欄關閉工作區,才能打開另外一個。

『陸』 如何防止java程序源代碼被反編譯

我們都知道JAVA是一種解析型語言,這就決定JAVA文件編譯後不是機器碼,而是一個位元組碼文件,也就是CLASS文件。而這樣的文件是存在規律的,經過反編譯工具是可以還原回來的。例如Decafe、FrontEnd,YingJAD和Jode等等軟體。下面是《Nokia中Short數組轉換演算法
類中Main函數的ByteCode:0 ldc #162 invokestatic #185 astore_16 return其源代碼是:short [] pixels = parseImage("/ef1s.png");
我們通過反編譯工具是可以還原出以上源代碼的。而通過簡單的分析,我們也能自己寫出源代碼的。
第一行:ldc #16
ldc為虛擬機的指令,作用是:壓入常量池的項,形式如下ldc index這個index就是上面的16,也就是在常量池中的有效索引,當我們去看常量池的時候,我們就會找到index為16的值為String_info,裡面存了/ef1s.png.
所以這行的意思就是把/ef1s.pn作為一個String存在常量池中,其有效索引為16。
第二行:2 invokestatic #18
invokestatic為虛擬機指令,作用是:調用類(static)方法,形式如下
invokestatic indexbyte1 indexbyte2
其中indexbyte1和indexbyte2必須是在常量池中的有效索引,而是指向的類型必須有Methodref標記,對類名,方法名和方法的描述符的引用。
所以當我們看常量池中索引為18的地方,我們就會得到以下信息:
Class Name : cp_info#1
Name Type : cp_info#19
1 和19都是常量池中的有效索引,值就是右邊<中的值,再往下跟蹤我就不多說了,有興趣的朋友可以去JAVA虛擬機規范。
這里我簡單介紹一下parseImage(Ljava/lang/String;)[S 的意思。
這就是parseImage這個函數的運行,我們反過來看看parseImage的原型就明白了
short [] parseImage(String)
那麼Ljava/lang/String;就是說需要傳入一個String對象,而為什麼前面要有一個L呢,這是JAVA虛擬機用來表示這是一個Object。如果是基本類型,這里就不需要有L了。然後返回為short的一維數組,也就是對應的[S。是不是很有意思,S對應著Short類型,而「[」對應一維數組,那有些朋友要問了,兩維呢,那就「[[」,呵呵,是不是很有意思。
好了,調用了函數,返回的值要保存下來吧。那麼就是第三行要做的事情了。

『柒』 python源碼編程成pyc後,怎麼防止反編譯

無法防止反編譯,但可以混淆,讓你即使反編譯了,也看不懂語法
下面一段源碼

sd=1

defseed(s):
globalsd
sd=s

defrandn(n):
globalsd
sd=(sd*1103515245+12345)&0x7fffffff
returnsd%n

defmain():
seed(11)
foriinxrange(4):
printrandn(313)

if__name__=='__main__':
main()

混淆後

oo000=1
if9-9:Ii.o0o00Oo0O-iI11I1II1I1I
defoooo(s):
globaloo000
oo000=s
if11-11:ii1I-ooO0OO000o
defii11i(n):
globaloo000
oo000=(oo000*1103515245+12345)&0x7fffffff
returnoo000%n
if66-66:iIiI*iIiiiI1IiI1I1*o0OoOoOO00
defI11i():
oooo(11)
forO0Oinxrange(4):
printii11i(313)
if78-78:i11ii11iIi11i.oOoO0oo0OOOo+IiiI/Iii1ii1II11i
if__name__=='__main__':
I11i()#

『捌』 如何改動makefile來避免沒有改動過的.c文件重復編譯

1.所有源文件沒動過,時間戳沒有變,任何操作都沒有;
2.生成的中間文件和目標文件都在,沒動過;
3.我的makefile是把不同目錄生成的所有中間文件都移到同一個obj目錄,最後在鏈接生成目標文件

『玖』 一個程序兩個以上源文件怎麼編譯

每一個項目只能有一個main函數,如果想再寫一個main函數那隻能新建一個項目了,然後把其他需要的代碼添加進來。之前的項目源文件不修改,exe文件沒有必要保存,除非你做出來一個有意義的可以稱為軟體的程序。

『拾』 怎樣才能解決能在C++ 中同時編譯兩個源文件的問題main()不能重復出現,那樣要怎麼弄才能同時編呢

去掉或者注釋掉那個多餘的main就可以了

閱讀全文

與兩個源文件怎麼防止重復編譯相關的資料

熱點內容
卡爾曼濾波演算法書籍 瀏覽:761
安卓手機怎麼用愛思助手傳文件進蘋果手機上 瀏覽:837
安卓怎麼下載60秒生存 瀏覽:796
外向式文件夾 瀏覽:229
dospdf 瀏覽:425
怎麼修改騰訊雲伺服器ip 瀏覽:380
pdftoeps 瀏覽:486
為什麼鴻蒙那麼像安卓 瀏覽:730
安卓手機怎麼拍自媒體視頻 瀏覽:180
單片機各個中斷的初始化 瀏覽:718
python怎麼集合元素 瀏覽:475
python逐條解讀 瀏覽:827
基於單片機的濕度控制 瀏覽:493
ios如何使用安卓的帳號 瀏覽:877
程序員公園采訪 瀏覽:805
程序員實戰教程要多長時間 瀏覽:968
企業數據加密技巧 瀏覽:129
租雲伺服器開發 瀏覽:807
程序員告白媽媽不同意 瀏覽:330
攻城掠地怎麼查看伺服器 瀏覽:595