对c/c++来说相当陌生。我正在为我的RaPi和.net写一些代码,这对我来说很容易,但我在c++中与设计有点冲突。
简而言之,什么时候应该将代码从主cpp文件与另一个cpp文件与单独的程序分开?
目前我有两个程序,通过一个插槽fifo相互交谈。
双鱼座-所有互联网通讯。输入,获取和信号连接以及从MainPi发送和接收数据。
MainPi-用PiSocket发送和接收数据,处理数据库和执行系统命令(例如拉/发gpio数据)。
我不确定的是:
基本上有4段代码。主回路、互联网连接、数据库调用和系统命令。应该什么时候/怎样爆发?我怀疑所有代码的总和将远远超过20k行,但它必须是相当实时的通信(在几秒钟内)。
使用套接字进行通信似乎很麻烦,所以我认为每个片段都应该是自己的cpp文件。同时,如果PiSocket.cpp引用MainPi,反之亦然,是否会是周期性冗余?或者,我应该用自己的线程调用main中无限循环中的每个片段吗?也会通过web/PiSocket进行代码更新,这可能很重要,但我对此表示怀疑。
当然这很简单,但我的搜索没有透露太多,真的不想以后再重新设计这个。
提前完成任务。

最佳答案

你把两个不同的问题混为一谈:
CPP文件意味着一个单独的C++翻译单元,它导致一个单独的对象/库文件,它可能或可能不链接到已经构建的其他对象中。
.cpp文件使用自己的main()可以生成单独的可执行程序,这些程序在自己的进程中运行
当您有单独的进程时,您只需要IPC机制,比如sockets/FIFO。在你的问题描述中没有任何东西表明这对你有用。
如果我是你,我会把“piSocket.cpp”写成一个互联网连接库:它可以使用线程在后台进行通信/处理,“main.cpp”中的代码调用可以规定在可报告事件发生时调用的函数(例如,数据来自互联网)。您还需要一个“piSocket.h”文件——通常包含与“piSocket”comms功能相关联的typedef、常量、枚举、函数声明、类定义、模板和/或内联函数。piSocket.cpp和mainPi.cpp都应该包含该头文件。
详细信息因编译器而异,但基本的生成过程可能类似于:

# compile piSocket.cpp into piSocket.o
g++ -c piSocket.cpp

# compile mainPi.cpp and link in piSocket.o to form myApp executable
g++ -o myApp mainPi.cpp piSocket.o

好吧,我想这会让你痛苦的。一个好的替代方法是将所有内容都放在一个文件中,并学习足够的语言以使功能首先工作,然后担心将文件内容分成两部分。如果你不能让功能正常工作,就没有必要理解更好的“物理设计”(分离成文件)。

关于c++ - 构建一个c++ linux程序。何时分解单独的文件与单独的程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33513059/

10-11 22:53
查看更多