Problem when using 'c' as a variable

// To blink the LEDs on SSD

#define a 2// connecting segment a to PIN2
#define b 3// connecting segment b to PIN3
#define c 4// connecting segment c to PIN4
#define d 5// connecting segment d to PIN5
#define e 6// connecting segment e to PIN6
#define f 8// connecting segment f to PIN8
#define g 9// connecting segment g to PIN9

void setup(){
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
}

// Code to blink the seven segment display

// To display digit from 0 to 4

void loop()
{
//ZERO
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,LOW);
delay(1000);
//ONE
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
delay(1000);
//TWO
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,LOW);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,LOW);
digitalWrite(g,HIGH);
delay(1000);
//THREE
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,HIGH);
delay(1000);
//FOUR
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
delay(1000);
}

This is a code to display 0-4 numbers on a seven segment display. Here, I've used a-g as variables.But, apparently 'c' already used as a variable in library files 'WCharacter.h' and 'WString.h'. So, while running this code, I'm getting an error as follows

/usr/share/arduino/hardware/arduino/cores/arduino/WString.h:108:29: note: in expansion of macro ‘c’
__ String & operator += (char c) {concat(c); return (this);}__
** ^
*

This is the case with only on PCs having Linux OS. In Windows, this code compiles with zero errors.

You have #define'd 'c' to mean '4', so the compiler sees:

 String & operator += (char 4)   {concat(4); return (*this);}

and thus complains.

#define'd tokens are always substituted everywhere except inside string constants and comments.

Its good practice to use uppercase names for #define'd constants to reduce the risk of such name
clashes.

Using 'const' variables will cause fewer strange problems than using '#define':

Change "#define c 4" to "const byte c = 4;"

#define  a 2// connecting segment  a to PIN2 Calling it something like "segment_A_pin" will also help eliminate pointless comments.

Please remember to use code tags when posting code

Things are much easier to deal with in arrays rather than repeating code:

// To blink the LEDs on SSD

const byte SegmentCount = 7;
const byte SegmentPins[SegmentCount] = {2, 3, 4, 5, 6, 8, 9};

const byte DigitMasks[10] =
{
  0b1111110, // 0
  0b0110001, // 1
  0b1101101, // 2
  0b1111001, // 3
  0b1110100, // 4
  0b1101101, // 5
  0b1101111, // 6
  0b0111000, // 7
  0b1111111, // 8
  0b1111100, // 9
};

void setup()
{
  for (byte i = 0; i < SegmentCount; i++)
    pinMode(SegmentPins[i], OUTPUT);
}

// Code to blink the seven segment display


// To display digit from 0 to 4

void loop()
{
  //ZERO
  DisplayDigit(DigitMasks[0]);
  delay(1000);
  //ONE
  DisplayDigit(DigitMasks[1]);
  delay(1000);
  //TWO
  DisplayDigit(DigitMasks[2]);
  delay(1000);
  //THREE
  DisplayDigit(DigitMasks[3]);
  delay(1000);
  //FOUR
  DisplayDigit(DigitMasks[4]);
  delay(1000);
}

void DisplayDigit(byte mask)
{
  for (byte i = 0; i < SegmentCount; i++)
    digitalWrite(SegmentPins[i], mask & (0x40 >> i));
}