簡體   English   中英

如何將c ++程序拆分為包含普通代碼行(不一定是函數)的文件?

[英]How do I split my c++ program into files that contain plain code lines, not necessarily functions?

這個問題看起來很熟悉,但是請相信我,實際上不是! 讓我解釋一下原因。 這與將函數保存在頭文件中並包括並調用它無關。 一個例子將清楚地說明我的查詢,因此我們開始:我有一個類似於以下程序:


#include whatever_should_be_included

int main() {

whatever-1

whatever-2

whatever-3

. . .

}


所有這些凡是在程序代碼,其中包括if條件, loop S和真的什么。 我希望將這些“ 任何內容 ”保存在文件中,比如說純文本文件或必要的擴展名,比如說“ exten ”是擴展名,那么我想將它們保存為:

chunk-1.extenchunk-2.exten ,...等文件將包含: chunk-2.exten whatever-1chunk-2.exten whatever-2 ,... etc等行的代碼行和我的程序現在應如下所示:


#include whatever_should_be_included #include those_chunks_maybe

int main(){

chunk-1.exten; //or whatever syntax necessary

chunk2.exten;

chunk-3.exten;

. . .

}


我是C ++和一般編程的初學者,所以請對我輕松一點:)逐步解釋清楚並給出一點解釋將不勝感激。

編輯1:

  1. 我正在使用Ubuntu 16.04

  2. 我的編譯器是g ++,盡管我沒有直接使用它,而是作為根宏在CERN的ROOT shell內編譯或加載程序。

編輯2:

當然,更好的方法是使用函數和標頭,但這並不意味着我們無法探索將純代碼文本分塊為不同文件並將其包含在main中的功能! 我想學習這個,但是我不明白學習這個(但是很乏味的)功能是怎么錯的! 為什么要完全投反對票? 這個問題會傷害人們嗎? 是不是好奇和增進知識?

我會說一些如何做,但首先我會說你可能不應該做。 我不知道您的應用程序,也許您確實有一個很好的理由,但這與語言的典型含義背道而馳,比解決引起問題的根本問題更可能導致可讀性和維護性問題。 。

就是說,在以#開頭的C ++偽指令中,是針對“預處理器”的,它在編譯之前會修改代碼。 特別是, #include復制另一個文件的內容代替指令,以便將所有內容一起編譯。 通常(最正確地是IMO)用於插入標頭,但是它可以用於任何東西。

按照慣例,您認為“大塊”文件不應以.c,.cpp或.h結尾;這是正確的。 因為這些暗示着關於內部結構的某些東西。 我猜你可以組成一個擴展,只要它不與任何標准沖突即可。

因此,如果您具有chunk1.cfragment或類似的內容,並且包含您的what whatever-1 ,則頂級.cpp文件將看起來像

#include whatever_should_be_included

int main(){

#include "chunk1.cfragment";
#include "chunk2.cfragment";
#include "chunk3.cfragment";

. . .
}

我不記得(可能取決於您的編譯器)在#include指令之前的行首是否可以有空格。 如果不是這樣,那是您的代碼將以丑陋的方式結束的另一種方式(但遠不是可讀性最差的問題)。

請注意,此處使用的引號用於包含的文件名,而不是像使用系統庫那樣使用尖括號。

更新 -根據您對Robert答案的評論,看來您真正追求的是全局可見/可修改的變量。 再說一遍,這通常不是最好的選擇,但是如果需要它,有比通過將代碼片段粘貼到單個大規模函數中更好的方法。

通常,比創建全局數據更好的方法是根據需要在函數之間傳遞參數。 但是,如果確實有到處都需要的數據,則可以使用全局變量來完成。

通常,函數可以共享對全局變量的訪問-全局變量是在任何函數外部聲明的。 要在代碼文件之間共享它們,您需要在所有文件中提供extern聲明(並在一個代碼文件中提供實際的變量定義)。 最好使用標頭進行管理。

已經有很長的時間了,所以這里可能有一些細節,但看起來或多或少是這樣的:

File1.h
===========================================
extern int a;
===========================================

File2.h
===========================================
void otherFunction();
===========================================

File1.cc
===========================================
#include "File1.h"
#include "File2.h"

int a;

int main() {
    otherFunction();
}
===========================================

File2.cc
===========================================
#include "File1.h"
#include "File2.h"

void otherFunction() {
    // do something with a
}
===========================================

即使您在考慮“代碼片段”方面,如果將它們表示為函數,也將擁有更快樂的時光。

檔案:what1.hpp

#pragma once

inline whatever1(int& arg)
{
   // code
}

文件:main.cpp

#include <iostream> // say...
#include "whatever1.hpp"


int main() {

    int some_variable;

    whatever1(some_variable);

    // ... etc

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM