Hab mir mal PicNics Vorschlag näher angeschaut..
Über die Typendefinition hab ich automatisch DDR,PIN und PORT? Wenn ja wäre dies ja super.
Code:
typedef struct { 
        uint8_t     PIN;         
        uint8_t     DDR;        
        uint8_t     PORT;       
} IO_REG; 

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

	if (level) {
		port->PORT |=  (1 << pin);            
	} else {
		port->PORT &= ~(1 << pin);          
	}

	return level; 
} 

uint8_t inGet(IO_REG* port, uint8_t pin, uint8_t pullup) {
	port->DDR &= ~(1 << pin);			//DDR as input

	if (pullup) {
		port->PORT |=  (1 << pin);            
	} else {
		port->PORT &= ~(1 << pin);          
	}

	if (port->PIN & (1 << pin)) {
		return 1;
	} else {
		return 0;
	}
}
Könnt ja nochmal über diesen code schauen. Compiliert mit 0 warnings. Noch nicht getestet.

Gruß