В общем, мне интересно, существует ли язык, где этот код будет недействительным, потому что, хотя counter
и distance
оба int
находятся под капотом, они представляют несовместимые типы в реальном мире :
#include <stdio.h>
typedef int counter;
typedef int distance;
int main() {
counter pies = 1;
distance lengthOfBiscuit = 4;
printf("total pies: %d\n", pies + lengthOfBiscuit);
return 0;
}
Это компилируется без предупреждений с помощью "gcc -pedantic -Wall" и всех других языков, на которых я его пробовал. Кажется, было бы неплохо запретить случайное добавление счетчика и расстояния, так где же поддержка языка?
(Между прочим, реальным примером, который вызвал этот вопрос, была работа веб-разработчика на PHP и Python - я пытался создать «HTML-экранированную строку», «SQL-экранированную строку» и «необработанный опасный ввод пользователя» несовместимо, но лучшее, что я могу получить, - это венгерская нотация приложений, как предлагается здесь -> http://www.joelonsoftware.com/articles/Wrong.html <- и которая все еще опирается на проверку человеком («неправильный код выглядит неправильно»), а не на поддержку компилятора (« неправильный код <em>является неправильным "))