-1

この質問はおなじみのように見えますが、実際にはそうではありません。理由を説明しましょう。これは、関数をヘッダー ファイルに保存し、それをインクルードして呼び出すことではありません。例は私のクエリを明確に説明するので、ここに行きます: 私は次のようなプログラムを持っています:


#include whatever_should_be_included

int main() {

whatever-1

whatever-2

whatever-3

. . .

}


ifこれらのすべては、条件、loops、および実際に何でも含む、プログラム内のコードです。これらの「何でも」をファイルに保存したい、たとえばプレーンテキストファイルまたは必要な拡張子を「」としましょう。拡張子を「exten」としましょう。次に、それらを次のように保存します。

chunk-1.exten, chunk-2.exten, .... etc を含むファイル: whatever-1, 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シェル内でプログラムをコンパイルまたはロードしています。

編集-2:

もちろん、より良い方法は関数とヘッダーを使用することですが、それは、プレーンなコードテキストをさまざまなファイルにチャンクアウトし、それらを main 内に含めるというこの機能を探索できないことを意味するものではありません! 私はこれを学びたかったのですが、この (どんなに退屈な) 機能を学ぶことがいかに間違っているのか理解できません !! なぜ正確に反対票を投じるのですか?この質問は人を傷つけますか? 好奇心旺盛で知識を深めませんか?

4

2 に答える 2

3

どうすればできるかについて少しお話ししますが、最初に、おそらくそうすべきではないと言います。私はあなたのアプリケーションを知りません.おそらくあなたには正当な理由があります. .

つまり、で始まる C++ ディレクティブ#は、コンパイル前にコードを変更する「プリプロセッサ」用です。特に#include、ディレクティブの代わりに別のファイルのコンテンツをコピーして、すべてが一緒にコンパイルされるようにします。これは通常 (そして IMO で最も正確には) ヘッダーを取り込むために使用されますが、何にでも使用できます。

慣例により、「チャンク」ファイルは .c、.cpp、または .h で終わってはいけないと考えるのは正しいことです。それらは内部の構造について特定のことを暗示しているからです。標準と競合しない限り、拡張機能を作成できます。

したがって、chunk1.cfragmentまたはそのようなものがあり、それがあなたの .cpp ファイルを含むwhatever-1場合、トップレベルの .cpp ファイルは次のようになります

#include whatever_should_be_included

int main(){

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

. . .
}

#include ディレクティブの前の行の先頭に空白を入れることができるかどうかは思い出せません (コンパイラによって異なる場合があります)。そうしないと、コードが醜くなる別の方法になります (ただし、ここでの可読性に関する最悪の問題からはほど遠いです)。

ここでは、システム ライブラリの場合のように山かっこではなく、含まれるファイル名に引用符を使用することに注意してください。

更新- ロバートの答えに対するあなたのコメントに基づいて、あなたが本当に求めているのは、グローバルに表示/変更可能な変数であるようです。繰り返しますが、これは通常は最善の方法ではありませんが、必要な場合は、コードの断片を 1 つの巨大な関数に結合するよりも良い方法があります。

通常、グローバル データを作成するよりも、必要に応じて関数間でパラメーターを渡すことをお勧めします。しかし、文字通りどこでも必要なデータがある場合は、グローバル変数を使用してそれを行うことができます。

一般に、関数はグローバル変数 (関数の外部で宣言されたもの) へのアクセスを共有できます。それらをコード ファイル間で共有するには、すべてのファイルで宣言を提供する必要がありexternます (そして、実際の変数定義を 1 つのコード ファイルで提供する必要があります)。これはヘッダーで管理するのが最適です。

かなりの時間が経過したので、詳細が少しずれているかもしれませんが、多かれ少なかれ次のようになります。

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
}
===========================================
于 2016-12-23T16:32:50.293 に答える
1

「コードの断片」で考えていても、関数として表現した方が楽しいです。

ファイル:whatever1.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

}
于 2016-12-23T16:34:26.417 に答える