Het piping karakter staat in C voor een bitwise OR. Wanneer je jouw parameters als bitwise values definieert of enumt kan je dat zelf ook.
Het verwerken van zo'n argument maakt dan vaak gebruik van een mask, waarin gekeken wordt of bepaalde bits aanstaan of niet.
Een voorbeeldje uit de losse pols:
[CPP]#define OPTIE_1 0x01
#define OPTIE_2 0x02
#define OPTIE_3 0x04
#define OPTIE_4 0x08
#define MEER 0x10
#define NOG_MEER 0x20
void doSomething(unsigned char parameters)
{
//wat algemene code
if (parameters & OPTIE_1)
{
//code die enkel wordt uitgevoerd als optie 1 gekozen werd
}
//meer van dat
if (parameters & MEER)
{
//code die enkel wordt uitgevoerd als er om meer gevraagd werd
if (parameters & NOG_MEER)
{
//code die enkel wordt uitgevoerd als MEER en NOG_MEER werden meegegeven
}
}
if (parameters & (OPTIE_2 | OPTIE_4))
{
//dit blok wordt uitgevoerd als optie 2 of optie 4 werd meegegeven
}
if ((parameters & (OPTIE_3 | NOG_MEER)) == (OPTIE_3 | NOG_MEER))
{
//hier komen we enkel als zowel OPTIE_3 als NOG_MEER zijn meegegeven
}
}
int main(int argc, char* argv[])
{
doSomething(OPTIE_3 | MEER);
return 0;
}[/CPP]
Een mogelijke reden om dit te gebruiken is dat je maar 1 byte argument nodig hebt om 8 'booleans' te kunnen doorgeven.