如何将我的C 程序分为包含普通代码行的文件,不一定功能

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

本文关键字:代码 文件 功能 不一定 包含普 我的 程序      更新时间:2023-10-16

这个问题看起来很熟悉,但相信我实际上不是!让我解释原因。这并不是要将函数保存在标题文件中,包括并调用它。一个示例将清楚地说明我的查询,所以我们走了:我有一个如下的程序:


#include whatever_should_be_included

int main(){

whatever-1

whatever-2

whatever-3

. . .

}


所有这些Whatevers都是程序中的代码,包括if条件,loop S以及其他任何内容。我想要这些" whyt " s保存在文件中,假设纯文本文件或任何必要的扩展名,请说" exten"是扩展的,那么我想要将它们保存为:

chunk-1.extenchunk-2.exten,....等文件将包含: whatever-1whatever-2,...等等的代码行,我的程序现在应该看起来像:


#include whatever_should_be_included #include those_chunks_maybe

int main(){

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

chunk2.exten;

chunk-3.exten;

. . .

}


我是C 和编程的初学者,因此请轻松对我:)一个逐步的清晰答案,并带有一些解释,将不胜感激。

edit-1:

  1. 我正在使用ubuntu 16.04

  2. 我的编译器是G ,尽管我不是直接使用它,但我正在编译或将程序加载到 cern的root root shell中,作为root Macros。

edit-2:

当然,更好的方法是使用功能和标题,但这并不意味着我们不能探索将平原代码文本分解为不同文件并将它们包含在主机中的功能!我想学习这件事,我不明白学习这个功能是错误的!为什么要确切投票否定?这个问题会伤害人们吗?它不是好奇和促进知识吗?

我会说一点关于你的能力,但首先我会说你可能不应该。我不知道您的应用程序,也许您确实有充分的理由,但这与该语言的典型习惯有关,并且更有可能引起可读性和维护的问题,而不是解决任何基本关注的问题都引起了问题。。

也就是说,以#开头的C 指令是针对"预处理器",该指令在编译之前修改代码。尤其是#include复制另一个文件的内容代替指令,以便所有文件都被整理在一起。它通常是(最正确地)用于拉动标头的(最正确地),但可以用于任何东西。

按照惯例,您认为您的"块"文件不应以.c或.cpp或.h的结尾;因为那些暗示着关于内部结构的某些事情。我猜您可以弥补扩展,只要它与任何标准不冲突。

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

#include whatever_should_be_included
int main(){
#include "chunk1.cfragment";
#include "chunk2.cfragment";
#include "chunk3.cfragment";
. . .
}

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

请注意,您在此处使用随附的文件名使用引号,而不是像系统库那样的角度括号。

update - 基于您对罗伯特答案的评论,似乎您真正追求的是全球可见/可修改的变量。再一次,我会说这通常不是最好的事情,但是如果您需要它,那么可以比将代码片段粘合到单个巨大功能中更好的方法。

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

在一般功能中,可以共享对全局变量的访问 - 在任何函数之外声明的变量。要通过代码文件共享它们,您需要在所有文件中提供extern声明(以及一个恰好在一个代码文件中的实际变量定义)。最好用标题来管理。

这已经是 long 时间,所以我可能会在这里有一些细节,但是看起来或多或少地像这样:

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
}
===========================================

即使您在思考"代码片段"方面,如果您将其表示为函数,也会有更快乐的时间。

文件:whywen1.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
}