Указывает ли Стандарт, как должен компилироваться исходный файл, и будет ли дополнительный этап предварительной обработки нестандартным? - PullRequest
1 голос
/ 08 марта 2011

Вопрос может быть немного расплывчатым, но возьмем в качестве основного примера шаг moc в Qt.Это нестандартно или разрешено стандартом, поскольку все, что видит компилятор, все еще чисто и допустимо в C ++.Другим примером, конечно, может быть файл config.h, который должен быть сгенерирован системой сборки так же, как файлы moc.

Я думаю, moc не указан в стандарте, но также не запрещен.

PS: источник этого вопроса происходит от этого небольшого обсуждения SO в комментариях .

1 Ответ

2 голосов
/ 08 марта 2011

У меня здесь нет копии стандарта (хотя давно читал некоторые части черновика), но я вполне уверен, что стандарт даже не требует, чтобы источники были представлены в виде файлов. Если я правильно помню, давным-давно (в 90-х) IDE Visual Age C ++ от IBM пытался вообще отказаться от хранения источников в файлах.

Поскольку стандарт C ++ ничего не говорит о системе сборки (make, jam или что-либо еще), все, что находится перед компилятором (и препроцессором C ++), выходит за рамки стандарта. Таким образом, что-то вроде moc или генерации config.h не является стандартным по отношению к стандарту C ++ и также не запрещено.

Но есть и другие стандарты. Например, для Qt использование moc является «стандартом» для предварительной обработки файлов перед вызовом компилятора C ++, так же как и при разработке Linux с использованием autoconf, GNU make и других инструментов is.

...