Diese Warnung bringt er gerne, wenn man mit Pointer arbeitet, das sagt garnix.

Übrigens: es ist nicht notwendig, aus den Pointer das DDRx Register zu ermitteln: Alle IO Register haben die gleiche struktur
Code:
typedef struct {
        uint_8_t     Pin;          // in
        uint_8_t     Ddr;        // control
        uint_8_t     Port;        // out
} IO_REG;

// Aufruf
          outSet((IO_REG*)&Pinb, 3, 1 )


 uint8_t outSet(IO_REG* port, uint8_t pin, uint8_t level) 
{
       port->Ddr |= (1 << pin);           // DDR auf Output

       if (level) 
            port->Port |= (1 << pin);             // Port.pin = 1
       else
            port->Port &= ~(1 << pin);          // Port.pin = 0
       return level;
}
Eventuell mit ausreichend "volatile"s beflastern