2015-11-17 3 views
4

В чем разница между printf("Hello, world!") и writeln("Hello, world!") на языке программирования D?Разница между printf() и writeln() в D

Я заметил, что writeln() ломается в конце, сам, а printf() - нет. Разве это единственная разница?

ответ

6

printf вызывает функцию C и, следовательно, работает по правилам ввода C. Примечательно, что вы должны получить строку формата правильно, или вы получите глупость. Например, прохождение int, когда вы указали %s вместо %d, скорее всего, приведет к краху вашей программы.

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

writeflnwritef, который автоматически добавляет новую строку в конец.

+0

Вы бы рекомендовали всегда использовать writeln/writef, тогда, учитывая, что это проще в использовании (чем меньше вы точно знаете, что вы делаете)? – Niklas

+0

Да, вы всегда должны использовать 'writefln' /' writef'. – sigod

+1

Вам не следует использовать какие-либо функции C, доступные в качестве D-порта в Phobos и/или в другой библиотеке, если только это не требуется для определенной оптимизации из-за уже существующей реализации, но обычно вы всегда должны идти со стандартной библиотекой D и/или любым другие библиотеки доступны с необходимой функциональностью. – Bauss

2

printf, как и в C, принимает строку формата. (например, printf("number = %d", 123) prints "number = 123")

writeln преобразует каждый аргумент в строку и печатает их один за другим, а затем печатает новую строку. (например, writeln("number = ", 123) отпечатки «число = 123»)

+1

О да, это тоже важно! writefln и writeln разные - в версии f используется строка формата, а plain writeln не работает - она ​​работает так, как вы сказали! –