Есть ли способ сделать C немного более осведомленным о типах и обеспечить безопасность типов?
Рассмотрим это:
typedef unsigned cent_t;
typedef unsigned dollar_t;
#define DOLLAR_2_CENT(dollar) ((cent_t)(100*(dollar)))
void calc(cent_t amount) {
// expecting 'amount' to semantically represents cents...
}
int main(int argc, char* argv[]) {
dollar_t amount = 50;
calc(DOLLAR_2_CENT(amount)); // ok
calc(amount); // raise warning
return 0;
}
Есть ли способ сделать вышеуказанный код минимальным предупреждением gcc?
Я знаю, что могу использовать C-structs для переноса unsigned
и достижения желаемого результата, мне просто интересно, был ли более элегантный способ сделать это.
Может быть, это немного больше?