【发布时间】:2014-02-24 15:40:52
【问题描述】:
我偶然发现了以下代码:
//
// Top-level file that includes all of the C/C++ files required
//
// The C code may be compiled by compiling this top file only,
// or by compiling individual files then linking them together.
#ifdef __cplusplus
extern "C" {
#endif
#include <stdlib.h>
#include "my_header.h"
#include "my_source1.cc"
#include "my_source2.cc"
#ifdef __cplusplus
}
#endif
这绝对是不寻常的,但它被认为是不好的做法,如果是,为什么?
我能想到的一个潜在负面因素是典型的构建系统很难分析依赖关系。这种技术没有被广泛使用还有其他原因吗?
【问题讨论】:
-
您将 C++ 文件包含在
extern "C"块中...这不仅仅是不好的做法。此外:在不常见的情况下包含源文件,因为-尤其是对于较大的项目-,您编译单独的模块,并相应地链接它们。包含源文件使every 函数无处不在 可用。extern和static函数没有意义...这不仅效率低下,而且混乱且不安全并且使您的项目更难合作,这意味着您必须重新-每当你修复一个错误时编译很多 -
@EliasVanOotegem 为了记录,这不是我的代码!像这样的编译技术和全局命名空间污染是 Verilog/SystemVerilog 开发中的行业标准(尽管 I would claimbad)实践。代码其实是来自各大模拟器厂商写的一个验证库……我就是想全面了解一下出错的全部原因。
-
好吧,我已经发布了您问题的答案。也许,这方面的另一个坏处是
extern "C"{,对我来说,暗示 C 代码,而不是暗示 C++ 代码的.cc文件。在某种程度上,您发布的代码是一个谎言(如在Java中:函数副作用是谎言),这很糟糕,mkay
标签: c++ c coding-style include build-process