Coder Social home page Coder Social logo

Make an include guard unique about libaco HOT 10 CLOSED

hnes avatar hnes commented on August 28, 2024 1
Make an include guard unique

from libaco.

Comments (10)

hnes avatar hnes commented on August 28, 2024

Good point, how about change 'ACO_H' to something like 'ACO_V1_H'?

V1 here means the major version number.

from libaco.

elfring avatar elfring commented on August 28, 2024

How do you think about to make include guards unique by appending a kind of UUID?

from libaco.

hnes avatar hnes commented on August 28, 2024

I think 'ACO_V1_H' is long enough.

The compilation errors will be yielded when it is happened (could be very rarely) that there is some other c header file has the exactly same include guard 'ACO_V1_H' (because many other 'aco_*' macros and prototypes which are defined in 'aco.h' is always required by the 'aco.c' and other libaco application source files).

I'll commit this adjustment soon :-)

from libaco.

elfring avatar elfring commented on August 28, 2024

I am curious then how often corresponding name space issues will occasionally matter.

from libaco.

hnes avatar hnes commented on August 28, 2024

How do you think about to make include guards unique by appending a kind of UUID?

I think that kind of solution probably be a little overweight. Imaging that there is a UUID hex in the include guard :D

But maybe one day this would be added into to the new C standard. Be honestly, personally I think this solution is a very good solution.

from libaco.

hnes avatar hnes commented on August 28, 2024

There is some search results about the "uuid include guard". It has been used on some occasion.

from libaco.

hnes avatar hnes commented on August 28, 2024

One problem here is, the possible inner api & macros collision (say there is another aco.h which also have some maybe different aco_* macros and prototypes) may still exist even when the include guard is unique. In some cases, I think the compilation errors would be yielded more easily when the two collision aco.h have the same include guard.

from libaco.

hnes avatar hnes commented on August 28, 2024

People normally would think that the C header file name (say "aco.h") is usually corresponding to the macro name of the include guard ("ACO_H" in this case).

If there is a totally different macro name of the include guard with the file name, it may would delay or even suppress some compilation errors that should be yielded as soon as possible.

So I think it is not necessary to use a different macro name of the include guard in aco.h, let's keep "ACO_H".

(Unless we choose to change the all aco_* started macros and prototypes into aco_{$UUID}_* in our source files, then the collision naming problems is solved fundamentally... But this kind of solution is only suited for very special and rare situations in real life.)

from libaco.

elfring avatar elfring commented on August 28, 2024

People normally would think that the C header file name (…) is usually corresponding to the macro name of the include guard ….

The expectations are varying, aren't they?

…, let's keep "ACO_H".

  • The probability for name clashes might be low enough also for such an identifier (for a while).
  • Other name variants can be safer.

from libaco.

hnes avatar hnes commented on August 28, 2024

The expectations are varying, aren't they?

…, let's keep "ACO_H".

  • The probability for name clashes might be low enough also for such an identifier (for a while).
  • Other name variants can be safer.

Yes, I agree with you. So, let's just remain what it is.

from libaco.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.