-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 shell 中的程序,作为根宏。

编辑2:

当然,更好的方法是使用函数和标题,但这并不意味着我们不能探索将纯代码文本分块到不同文件并将它们包含在 main 中的功能!我想学习这个,但我不明白学习这个(无论多么枯燥)功能是错误的!为什么投反对票呢?这个问题是在害人吗?不就是好奇和促进知识吗?

4

2 回答 2

3

我会说一点你怎么能,但首先我会说你可能不应该。我不知道您的应用程序,并且可能您确实有充分的理由,但这与语言的典型特征背道而驰,并且更有可能导致可读性和维护问题,而不是解决驱动问题的任何潜在问题。 .

也就是说,在 C++ 指令中,#以“预处理器”开头的指令在编译之前修改代码。特别是#include复制另一个文件的内容代替指令,以便将所有内容编译在一起。它通常(并且最正确地是 IMO)用于拉入标题,但它可以用于任何事情。

按照惯例,您认为“块”文件不应以 .c、.cpp 或 .h 结尾是正确的;因为这些暗示了关于内部结构的某些事情。我猜你可以组成一个扩展,只要它不与任何标准冲突。

因此,如果您有chunk1.cfragment或类似的东西,并且它包含您whatever-1的 .cpp 文件,那么顶级 .cpp 文件看起来像

#include whatever_should_be_included

int main(){

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

. . .
}

我不记得(这可能取决于您的编译器)您是否可以在#include 指令之前的行首有空格;如果不是,那是您的代码最终会变得丑陋的另一种方式(但远不是这里可读性最糟糕的问题)。

请注意,您在此处对包含的文件名使用引号,而不是像使用系统库那样使用尖括号。

更新- 根据您对罗伯特的回答的评论,您真正追求的似乎是全局可见/可修改的变量。我再说一遍,这通常不是最好的事情,但如果你需要它,有更好的方法来获得它,而不是将代码片段粘合到一个庞大的函数中。

通常,比创建全局数据更好的是根据需要在函数之间传递参数。但是,如果您确实拥有到处都需要的数据,则可以使用全局变量来实现。

一般来说,函数可以共享对全局变量的访问——那些在任何函数之外声明的变量。要跨代码文件共享它们,您需要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
}
===========================================
于 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 回答