No, what you're dealing with is a type discipline issue known as structural equivalence vs name equivalence. As Dog said, the closest thing you could do to achieve what you want is use structs, but this could be a waste of memory if the compiler chooses to add padding (which in this case is unlikely). C uses structural equivalence (meaning the two types are the same thing) for aliases, but name equivalence for different declared structs (two struct types with the same layout are not treated as equivalent).
An example of using structs to do this:
typedef struct {
double value;
} meters;
typedef struct {
double value;
} kilograms;
int main(){
meters m;
kilograms k = {2}; // initialized
m.value = 1;
k = m; // error, can't assign meters to kilos
return 0;
}
You may wish to read this article: http://www.joelonsoftware.com/articles/Wrong.html describing how you can help avoid these issues with naming conventions