/ / C makro wrapping - c, makrá, c-preprocesor

C makro wrapping - c, makrá, c-preprocesor

Takže som sa stretol s nasledujúcim kódom v knižnici pre C pre RF komunikáciu:

#define __COMB(a,b,c) (a##b##c)
#define _COMB(a,b,c) __COMB(a,b,c)

Čo sa v podstate používa na vytvorenie rôznych mien pre konštanty a funkcie. Jednoducho spája parametre.

Čo nemám, je druhá línia. Existuje nejaký dôvod, prečo makro zabaliť? Ak je to len pomenovanie, prečo nie len napísať:

#define _COMB(a,b,c) (a##b##c)

Knižnica je k dispozícii tu.

Vopred ďakujem!

odpovede:

5 pre odpoveď č. 1

Jedná sa o to, aby sa preprogramoval preprocesor C, aby sa parametre rozšírili predtým, ako sa znova zrekonštruujú. Tento typ oddelenia je potrebný v niektorých situáciách, napríklad ak __COMB sa má použiť v stringifikácii parametra makra preprocesora.


2 pre odpoveď č. 2

Dvojité makro sa používa na to, aby sa uistil, že to bude fungovať aj keď sú parametre aj makrá.

Bez dvojitého makro by sme sa dostali XXYYZZ namiesto xyz:

#define XX x
#define YY y
#define ZZ z
_COMB(XX, YY, ZZ)