问题可能有点模糊,但作为Qt的moc步骤的一个主要例子。它是非标准的还是标准所允许的,因为编译器看到的所有内容仍然是纯粹有效的C ++。另一个例子当然是config.h
文件,它需要由构建系统生成,就像moc文件一样。
我认为moc未在标准中指定,但也不被禁止。
PS:这个问题的根源来自this little discussion on SO in the comments。
答案 0 :(得分:2)
我这里没有标准的副本(很久以前就读过草案的某些部分了),但我很确定标准甚至没有规定来源必须作为文件存在。如果我没记错的话,很长一段时间(90年代)IBM的Visual Age C ++ IDE试图放弃在文件中存储源代码。
由于C ++标准对构建系统(make,jam或者任何东西)没有任何说明,因此编译器(和C ++预处理器)之前的所有内容都超出了标准的范围。因此,对于C ++标准,moc或config.h的生成都是非标准的,并且也不允许。
但也有其他标准。例如,对于Qt,使用moc是在调用C ++编译器之前预处理文件的“标准”,就像在linux开发中使用autoconf,GNU make和其他工具一样。