2016-09-26 74 views
0

我正在使用函數。 是不是很好的做法,我在另一個.cpp文件中編寫函數,並將其包含在主函數中? 像這樣:#include「lehel.cpp」。這是包含源文件的好習慣嗎?

這是好的,還是應該直接在main.cpp文件中寫入函數?

+8

你可能想了解的頭文件。 – jaggedSpire

+9

一個應該幾乎/永遠不會包含cpp文件 – NathanOliver

+2

這可能有所幫助:http://stackoverflow.com/questions/333889/why-have-header-files-and-cpp-files-in-c – vu1p3n0x

回答

4

一個好的做法是將功能分成單獨的軟件單元,以便它們可以重複使用,以便更改一個單元對其他單元幾乎沒有影響。

如果main包含lehel.cpp,這意味着lehel.cpp中的任何更改都會強制編制main。但是,如果lehel.cpp單獨編譯並鏈接,則更改爲lehel.cpp不會強制main重新編譯;只有鏈接在一起。

恕我直言,頭文件應包含如何使用函數的信息。源文件應該包含函數的實現。源文件中的功能應與主題相關聯。另外,保持源文件的大小會減少注入缺陷的數量。

4

已建立的做法是將可重用函數的函數聲明放入.h.hpp文件中,並將該文件包括在需要它們的位置。

Foo.cpp中

int foo() 
{ 
    return 42; 
} 

foo.hpp

#ifndef FOO_HPP // include guards 
#define FOO_HPP 

int foo(); 

#endif // FOO_HPP 

的main.cpp

#include "foo.hpp" 

int main() 
{ 
    return foo(); 
} 

包括.cpp文件只是有時被用來從聲明分裂模板定義,但即使這種用法是有爭議的,因爲有反方案創建對(0 (foo.hppfoo_fwd.hpp)。

+0

因此,它更好,如果我在main.cpp文件中聲明瞭該函數。我是一個初學者:) –

+0

我建議你只是創建一個頭文件,而不是在main中聲明它。 – krzaq

+0

的'的#pragma once'好處是,如果它不支持的編譯器被允許悄悄地丟棄它,留給你不知道你有沒有包括警衛。可笑的hi-jinks隨之而來。它也有一些與符號鏈接和網絡掛載有關的問題,除了它只是桃色之外。確保你的編譯器支持擴展,並且你不會移植到其他編譯器,並保持你的編譯系統簡單和本地,你很好。 – user4581301

0

頭文件(.h)旨在提供多個文件所需的信息。像類聲明,函數原型和枚舉這樣的東西通常放在頭文件中。總之,「定義」。

代碼文件(.cpp)旨在提供只需要在一個文件中知道的實現信息。通常,函數體和內部變量應該/將永遠不會被其他模塊訪問,屬於.cpp文件。總之,「實施」。

最簡單的問題來問問自己,以確定什麼屬於哪裏「如果我改變這個,我將不得不改變其他文件中的代碼,使事情再次編譯?」如果答案是「是」,它可能屬於頭文件;如果答案是「否」,它可能屬於代碼文件。

https://stackoverflow.com/a/1945866/3323444

要回答你的問題,作爲一個程序員這將是一個不好的做法,增加一個功能,當CPP給你頭文件包含。

0

通常它不這樣做(和頭被使用)。然而,有一種稱爲「合併」的技術,這意味着將所有(或一堆).cpp文件包括在一個主要的.cpp文件中,並將其構建爲一個單元。

爲什麼它可能有時做的原因是:

  • 有時竟快相比,分別建立的所有文件(其中一個原因可能是,例如,該首部宣讀了「聯軍」大單元的編譯時間只有一次,而不是每個.cpp文件分開)
  • 更好的優化機會 - 編譯器將整個源代碼視爲一個整體,因此它可以跨合併的.cpp文件做出更好的優化決策(如果每個文件都是可能的單獨編譯)

我曾經使用的改善更大項目的編譯時間 - 基本上創建多個(8)基本源文件,其中每個包括在cpp文件的一部分,然後被建立並聯。完全重建後,該項目的建造速度提高了約40%。

然而,如所提到的,當然原因單個文件的變化重建構成單元,其可以是連續的開發過程中的缺點的。

相關問題