标准是否指定了如何编译源文件以及额外的预处理步骤是否为非标准?

时间:2011-03-08 16:55:35

标签: c++ qt compilation c-preprocessor standards

问题可能有点模糊,但作为Qt的moc步骤的一个主要例子。它是非标准的还是标准所允许的,因为编译器看到的所有内容仍然是纯粹有效的C ++。另一个例子当然是config.h文件,它需要由构建系统生成,就像moc文件一样。

我认为moc未在标准中指定,但也不被禁止。

PS:这个问题的根源来自this little discussion on SO in the comments

1 个答案:

答案 0 :(得分:2)

我这里没有标准的副本(很久以前就读过草案的某些部分了),但我很确定标准甚至没有规定来源必须作为文件存在。如果我没记错的话,很长一段时间(90年代)IBM的Visual Age C ++ IDE试图放弃在文件中存储源代码。

由于C ++标准对构建系统(make,jam或者任何东西)没有任何说明,因此编译器(和C ++预处理器)之前的所有内容都超出了标准的范围。因此,对于C ++标准,moc或config.h的生成都是非标准的,并且也不允许。

但也有其他标准。例如,对于Qt,使用moc是在调用C ++编译器之前预处理文件的“标准”,就像在linux开发中使用autoconf,GNU make和其他工具一样。