Несоответствие в отношениях между Java и C

1

Пожалуйста, простите меня, если мой вопрос кажется довольно noobish. Это мой первый вопрос.

У меня есть простой вопрос в моем сознании. Язык Java реализован с использованием C и C++.

Мой вопрос:

В языке C поведение форматирования C не определено для использования разных модификаторов, чем данный тип данных.

int c=10;
printf("%f",c);    // unspecified behaviour

Если в Java, если мы используем аналогичную концепцию для печати номера с использованием другого спецификатора формата, мы получаем IllegalFormatConversionExceptoion.

Исключительная информация: -

Исключение в потоке "main" java.util.IllegalFormatConversionException: f! = Java.lang.Integer

Мой вопрос:

Почему так разница между Java и C, хотя Java, получена из C!

Пожалуйста, очистите мои сомнения. Я буду благодарен вам гениям...

  • 5
    Но каков твой вопрос?
  • 1
    Я думаю, что лучший способ взглянуть на это - Java использует обработку исключений для захвата или управления неопределенным поведением, где, как и в C, у нас нет концепции обработки исключений.
Показать ещё 4 комментария
Теги:
exception
format
format-specifiers

2 ответа

5
Лучший ответ

printf в Java вдохновлен тем же методом в C, но работает совершенно по-другому. Если вы дадите ему BigDecimal например, он напечатает его, даже если C не имеет BigDecimal.

Короче говоря, только потому, что Java похожа на C, не означает, что она использует одни и те же базовые функции. В большинстве случаев Java имеет собственные реализации для обеспечения;

  • определенное поведение
  • что согласуется с тем, как используется Java.
  • работает одинаково на всех платформах ОС.

Почему так разница между Java и C, хотя Java является производной от C

Почему нет? Почему это вообще имеет значение?

Позвольте мне привести вам другой пример. Глагол "изготовления" буквально означал человека, и все же сегодня он почти означает противоположность. Просто потому, что один язык происходит от другого, это не значит, что они должны быть одинаковыми.

  • 0
    Хотя ваш ответ был хорош, но я хочу более четкое объяснение. Будете ли вы более конкретно к этому!
  • 1
    @asad Чтобы дать четкий / конкретный ответ, мне нужен четкий / конкретный вопрос.
Показать ещё 5 комментариев
0

Поскольку исторически функция printf вызывала всевозможные головные боли, когда спецификаторы формата были неправильными или отсутствовали аргументы. Поэтому языки, полученные из C, в частности C++ и Java, пошли на необычные длины, чтобы избежать проблемы с printf.

В то же время компиляторы C были улучшены, чтобы понять, как работает printf, и генерировать предупреждения, когда они используются неправильно. Следовательно, проблема printf больше не существует (если вы не игнорируете/запрещаете предупреждения).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню