如何将我的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
.
.
.
}
所有这些Whatevers都是程序中的代码,包括if
条件,loop
S以及其他任何内容。我想要这些" whyt " s保存在文件中,假设纯文本文件或任何必要的扩展名,请说" exten
"是扩展的,那么我想要将它们保存为:
chunk-1.exten
, chunk-2.exten
,....等文件将包含: whatever-1
, whatever-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:
-
我正在使用ubuntu 16.04
-
我的编译器是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
}
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- 此代码编译良好,但文件未创建?请指出错误
- 找不到Linux Visual Studio代码C++文件
- C++(.cpp文件和.h文件)拆分代码并添加一个函数,提取 - 这很容易吗?
- Visual Studio代码文件未输出
- 是否可以使用 GCC 编译具有特定编译器标志的代码文件的一部分?
- 如何从ifstream加载LLVM比特代码文件
- 在同一代码文件中包括 Directx 9 和 10
- 如果我只想要架构良好的工作区,但不一定是分开的编译,如何在C++中组织头/代码文件
- 使用 Eclipse 运行.exe C 代码文件
- 是否可以稍后在代码(C++ I/O 文件)中使用输出文件作为输入文件
- 匿名命名空间-在头文件和代码文件中都有意义
- 代码文件外的代码文档
- 在静态库中硬编码的代码文件和头路径
- 更快地解析代码文件
- 为什么有些代码文件使用 close() 而不包含 unistd.h
- 在代码(.c文件)我如何找到linux发行版名称版本
- 在一个代码文件中使用头文件,反之亦然
- SonarQube未分析带有警告的C++代码文件不在项目目录下
- Qt 创建器代码文件重构