【发布时间】:2011-07-11 06:36:53
【问题描述】:
这个问题可能有点模糊,但以 Qt 的 moc 步骤为例。它是非标准的还是标准允许的,因为编译器看到的所有内容仍然是纯粹且有效的 C++。另一个例子当然是 config.h 文件,它需要像 moc 文件一样由构建系统生成。
我认为标准中没有规定 moc,但也没有被禁止。
【问题讨论】:
标签: c++ qt compilation c-preprocessor standards
这个问题可能有点模糊,但以 Qt 的 moc 步骤为例。它是非标准的还是标准允许的,因为编译器看到的所有内容仍然是纯粹且有效的 C++。另一个例子当然是 config.h 文件,它需要像 moc 文件一样由构建系统生成。
我认为标准中没有规定 moc,但也没有被禁止。
【问题讨论】:
标签: c++ qt compilation c-preprocessor standards
我在这里没有标准的副本(虽然很久以前阅读过草案的某些部分),但我很确定标准甚至没有规定源必须作为文件存在。如果我没记错的话,很久以前(90 年代)IBM 的 Visual Age C++ IDE 试图完全放弃将源存储在文件中。
由于 C++ 标准没有说明构建系统(make、jam 或其他),因此编译器(和 C++ 预处理器)之前的所有内容都超出了标准的范围。因此,像 moc 或生成 config.h 之类的东西对于 C++ 标准来说是非标准的,也不被禁止。
但也有其他标准。例如,对于 Qt,使用 moc 是在调用 C++ 编译器之前预处理文件的“标准”,就像在 linux 开发中使用 autoconf、GNU make 和其他工具一样。
【讨论】:
moc 是“Qt-C++ 编译器”(或其中的一部分),而不是 C++ 编译器。不同之处在于 moc 的输入比我的 Java 编译器的输入更接近标准 C++。