[Development] Using #pragma once

Henry Skoglund fromqt at tungware.se
Mon Oct 8 00:17:30 CEST 2018


On 2018-10-07 20:39, Thiago Macieira wrote:
> On Sunday, 7 October 2018 01:56:47 PDT Lars Knoll wrote:
>> Hi,
>>
>> Just a quick question: Does anybody have any good arguments against us
>> starting to use #pragma once instead of header guards throughout our code
>> base?
> 
> Yes, two:
> 
> a) not supported everywhere
> b) not well-defined behaviour when it comes to anything but the simplest
> organisation
> 
> For example, I have ~/src as a bind-mount to ~/dev/src. That means
> 	~/src/qt/qt5/qtbase/src/corelib/global/qglobal.h
> 	~/dev/src/qt/qt5/qtbase/src/corelib/global/qglobal.h
> are actually the same file, but they aren't for the effects of #pragma once
> because the paths differ.
> 
> Another problem is qcompilerdetection.h, qprocessordetection.h,
> qsystemdetection.h, qtypeinfo.h, etc. which depend on the header guards to
> break the include cycle. Ditto for qlist.h + qstringlist.h and
> qbytearraylist.h
> 
...
...
> 
> I recommend against changing Qt.
> 

Hi, but isn't C++17's __has_include preprocessor cmd an implicit 
endorsement of #pragma once? I mean, they both assume that the file 
namespace is stable and idempotent.

The example with ~/src as a bind-mount to ~/dev/src above, reminds me of 
the old pointer aliasing problems in C++. But cannot it be solved by 
requiring #pragma once to always call realpath() first, i.e. always test 
on "the canonicalized absolute pathname" that realpath() returns?

Rgrds Henry




More information about the Development mailing list