我正在使用函數。 是不是很好的做法,我在另一個.cpp文件中編寫函數,並將其包含在主函數中? 像這樣:#include「lehel.cpp」。這是包含源文件的好習慣嗎?
這是好的,還是應該直接在main.cpp文件中寫入函數?
我正在使用函數。 是不是很好的做法,我在另一個.cpp文件中編寫函數,並將其包含在主函數中? 像這樣:#include「lehel.cpp」。這是包含源文件的好習慣嗎?
這是好的,還是應該直接在main.cpp文件中寫入函數?
一個好的做法是將功能分成單獨的軟件單元,以便它們可以重複使用,以便更改一個單元對其他單元幾乎沒有影響。
如果main
包含lehel.cpp
,這意味着lehel.cpp
中的任何更改都會強制編制main
。但是,如果lehel.cpp
單獨編譯並鏈接,則更改爲lehel.cpp
不會強制main
重新編譯;只有鏈接在一起。
恕我直言,頭文件應包含如何使用函數的信息。源文件應該包含函數的實現。源文件中的功能應與主題相關聯。另外,保持源文件的大小會減少注入缺陷的數量。
已建立的做法是將可重用函數的函數聲明放入.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.hpp
和foo_fwd.hpp
)。
因此,它更好,如果我在main.cpp文件中聲明瞭該函數。我是一個初學者:) –
我建議你只是創建一個頭文件,而不是在main中聲明它。 – krzaq
的'的#pragma once'好處是,如果它不支持的編譯器被允許悄悄地丟棄它,留給你不知道你有沒有包括警衛。可笑的hi-jinks隨之而來。它也有一些與符號鏈接和網絡掛載有關的問題,除了它只是桃色之外。確保你的編譯器支持擴展,並且你不會移植到其他編譯器,並保持你的編譯系統簡單和本地,你很好。 – user4581301
頭文件(.h
)旨在提供多個文件所需的信息。像類聲明,函數原型和枚舉這樣的東西通常放在頭文件中。總之,「定義」。
代碼文件(.cpp
)旨在提供只需要在一個文件中知道的實現信息。通常,函數體和內部變量應該/將永遠不會被其他模塊訪問,屬於.cpp
文件。總之,「實施」。
最簡單的問題來問問自己,以確定什麼屬於哪裏「如果我改變這個,我將不得不改變其他文件中的代碼,使事情再次編譯?」如果答案是「是」,它可能屬於頭文件;如果答案是「否」,它可能屬於代碼文件。
https://stackoverflow.com/a/1945866/3323444
要回答你的問題,作爲一個程序員這將是一個不好的做法,增加一個功能,當CPP給你頭文件包含。
通常它不這樣做(和頭被使用)。然而,有一種稱爲「合併」的技術,這意味着將所有(或一堆).cpp文件包括在一個主要的.cpp文件中,並將其構建爲一個單元。
爲什麼它可能有時做的原因是:
我曾經使用的改善更大項目的編譯時間 - 基本上創建多個(8)基本源文件,其中每個包括在cpp文件的一部分,然後被建立並聯。完全重建後,該項目的建造速度提高了約40%。
然而,如所提到的,當然原因單個文件的變化重建構成單元,其可以是連續的開發過程中的缺點的。
你可能想了解的頭文件。 – jaggedSpire
一個應該幾乎/永遠不會包含cpp文件 – NathanOliver
這可能有所幫助:http://stackoverflow.com/questions/333889/why-have-header-files-and-cpp-files-in-c – vu1p3n0x