I think you're a bit confused. The smallest variable possible is the smallest addressable value by the system. On most systems this is 1 byte, not 1 bit. A char is 1 byte wide and is the smallest type available.

However, there are struct bit fields. Bit fields are used to pack data into a struct as tightly as possible. For example, you could have a struct like this.

Code:
struct flags {
  unsigned active:1;
  unsigned alive:1;
  unsigned has_fuel:1;
  unsigned flying:1;
};
Each of these fields will only take 1 bit of memory and the C compiler will pack them together in the same byte. However, this is a bit misleading. You cannot take the address of any of these bit fields because you cannot address a single bit. Behind the scene the C compiler and just setting or clearing single bits by taking a larger value from memory, toggling and single bit and replacing the entire value. Bit fields blur the line a bit of what is and is not a "variable."