> On 13 Oct 2022, at 16:56, Kyle Edwards via Development 
> <development@qt-project.org> wrote:
> 
> On 10/13/22 10:42, Jean-Michaël Celerier wrote:
>> >The only way you’d have a strong case with this is if it has some other 
>> >significant benefit, like compilation speedup.
>> 
>> The main benefit to me is that it entirely removes possibilities for 
>> conflict due to headers having the same name. At least Qt takes great care 
>> of avoiding this but still, notice that e.g. the authors of Qt3D's 
>> Qt3DCore::QTransform had to be careful to not just do #ifndef QTRANSFORM_H
>> 
>> Now what happens when someone develops a different library but with a header 
>> guard similar to Qt's?
>> 
>> If I grep into the various cloned projects on my hard drive, for instance I 
>> see
>> 
>> #ifndef QRENDERER_H
>> #ifndef QGLRENDERER_H
>> #ifndef QSEARCHFIELD_H
>> #ifndef QLOG_H
>> #ifndef QJACK_H
>> #ifndef QENC_H
>> #ifndef QRANGESLIDER_H
>> #ifndef QDOUBLERANGESLIDER_H
>> 
>> etc... is the Qt project 100% confident that it will *never ever* use these 
>> names? With pragma once this is a 100% non-problem.
> 
> I agree with previous points that while #pragma once can work well for a 
> standalone program, it has the potential to cause problems when used in 
> libraries that other developers use. Even CMake omitted #pragma once from the 
> one (admittedly deprecated) header that may be consumed externally 
> (cmCPluginAPI.h).
> 

> However, there are ways to enforce the use of unique header guards. 
> clang-tidy has an extensible header guard check that can be customized 
> per-project, and plugin loading functionality. Qt could create a clang-tidy 
> plugin that sets up this header guard check and enforces a unique-enough 
> header guard in CI.

That works to avoid clashes inside a project, but doesn't help if user 
applications mix Qt + their code + other libraries not under their control, 
which is similar to the issues of #pragma once.
Header guards do have downsides too, but I suppose software developers got used 
to them and have the necessary workarounds in place. Which is a valid argument 
for not introducing #pragma once in Qt, which would require different 
workarounds, and create friction that would need a very compelling argument to 
inflict.

-- 
Eike Ziller
Principal Software Engineer

The Qt Company GmbH
Erich-Thilo-Straße 10
D-12489 Berlin
eike.zil...@qt.io
http://qt.io
Geschäftsführer: Mika Pälsi,
Juha Varelius, Jouni Lintunen
Sitz der Gesellschaft: Berlin, Registergericht: Amtsgericht Charlottenburg, HRB 
144331 B


_______________________________________________
Development mailing list
Development@qt-project.org
https://lists.qt-project.org/listinfo/development

Reply via email to