有没有办法在C中采用自下而上的方法?

Jag*_*gan 1 c

通常,C语言使用自上而下的方法,而C++使用自下而上的方法.是否有必要遵循这些方法?我可以在C中采用自下而上的方法吗?如果是这样......怎么样?

Ste*_*sop 7

如果它甚至是真的,这是关于C和C++程序员的陈述,而不是关于语言的陈述.

可能的情况是,C++程序员更可能将其程序视为小型可重用组件的集合.然后他们倾向于自下而上的设计.

可能的情况是,C程序员更有可能将他们的程序视为一项重大任务,他们将这些任务细分为更小,更容易的任务.然后他们倾向于自上而下的设计.

或者可能没有这样的趋势.两种语言都不妨碍任何一种方法.例如,假设我想编写一些分析某些数据并打印报告的代码.这是C中自上而下的方法:

# first version of the code (doesn't compile)
raw_data = read_the_data();
processed_data = perform_the_analysis(raw_data);
report = prepare_report(processed_data);
puts(report);
Run Code Online (Sandbox Code Playgroud)

对于自下而上的C方法,我可能会首先编写一些非常通用,可重用的代码来解析存储的数据格式,因为我知道我将要加载数据.同样地,我会编写一些代码,这些代码以各种方式对解析后的数据形式进行操作,这些代码通常在数据的性质上很有用.然后我会编写使用这些工具的代码来分析我的特定应用程序所需的数据,编写构建我想要的报告的代码,然后将它们全部拉出来.

在C++中,我会做同样的事情,在这两种情况下,除了我不会设计数据结构和操作它们的函数之外,我将设计将数据封装在一起的类以及对该数据的相关基本操作,以及然后是与这些类一起使用的非成员函数.

无论哪种方式,您都可以得到相当类似的代码.测试的另一个方面是测试 - 如果你自下而上构建,那么一旦你编写了任何代码,你就会编写一些有用的东西,你可以进行有用的测试.可以使用合适的伪组件测试没有任何组件实现的自上而下的框架,但我常常不确定测试的真实性.

我不知道C++程序员比C程序员更加或更少地担心具体的ASAP.你所做的权衡是考虑大局而不是思考你现在可以在合理的工作中实现的东西,以及如何让两者相遇.还要考虑解决你手边的问题,而不是考虑如何解决涉及问题涉及的问题的问题.那些不是真正的语言问题.