Когда использовать printf / scanf против cout / cin? - PullRequest
8 голосов
/ 15 октября 2011

Я тестирую некоторые фрагменты, которые я нашел в сети, используя g ++ из MinGW. Это компилятор C ++ ... почему тогда он правильно компилирует C .... почему люди переплетают C и C ++.

Конкретный вопрос: это О.К. использовать как C, так и C ++ и компилировать под g ++. Если ответ да, это облегчает мою жизнь, так как мне не нужно изменять код.

Как ни странно ... чтобы заставить работать некоторый C ++, особенно при передаче строки в конструктор ifstream требуется строка типа C ...

Полагаю, что из-за того, что C ++ время от времени зависит от конструкций C, можно написать два языка вместе.

Однако из соображений стиля следует остановиться на cout / cin или printf / scanf.

Ответы [ 4 ]

5 голосов
/ 15 октября 2011

Есть несколько странностей, где требуется char*. Вы можете преодолеть разрыв, используя .c_str() метод std::string, чтобы получить его.

По большей части, подмножество C в C ++ совместимо. То, как именно он несовместим, по большей части не имеет значения:

http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B

Если вы компилируете фрагменты кода C с помощью компилятора C ++, обязательно измените его на использование формата lib "c" в ваших включениях ... например #include <cstdio> вместо #include <stdio.h>

Является ли плохой практикой использование заголовка C вместо его эквивалента в C ++ в C ++ (например, stdio.h вместо cstdio)?

Достаточно аргументированный аргумент самого Бьярне о том, почему следует избегать scanf, смотрите в начале этой статьи:

http://www2.research.att.com/~bs/new_learning.pdf

Использование iostreams вместо printf также дает много преимуществ:

'printf' против 'cout' в C ++

3 голосов
/ 15 октября 2011

Язык C ++ наследует большую часть своей основной функциональности от C. Это потому, что C ++ был получен из C. Стандарт C ++ включает, в качестве ссылки, большую часть стандарта C. Поэтому вы можете использовать компилятор C ++ для написания кода с использованием конструкций, идиом и парадигм C. Это часто упоминается как использование C ++ «как лучший C».

Длинное и короткое из вышесказанного - да, вы можете использовать printf в коде C ++. Это прямо разрешено Стандартом.

Однако при этом часто игнорируются многие функции, определяющие C ++. Я оставлю этот разговор для другого вопроса, но достаточно сказать, что многие люди скажут вам просто «не делайте этого» или «это не C ++». Это исключает причины, по которым вы, возможно, не захотите использовать printf в программе на C ++, или даже почему вы этого хотите. Но будьте уверены, что это технически разрешено.

2 голосов
/ 15 октября 2011

Это О.К. использовать как C, так и C ++ и компилировать под g ++.

Да, это прекрасно, чтобы смешать два языка. Это часто встречается в коде, который начинался как C, но затем добавлялось все больше и больше функций C ++ (очевидно, кто-то изменил компилятор по ходу дела).

Как правило, код C компилируется и запускается с помощью компилятора C ++. Существует много возможных исключений, таких как использование ключевых слов, таких как class и virtual для имен вещей в коде C, или смягченных правил приведения в соответствие с C.

Вы часто будете слышать, как люди говорят: «Это очень разные языки». Это потому, что любой вопрос программирования , который вы задаете, вероятно, имеет другой ответ в зависимости от того, какой язык вы пытаетесь использовать. Однако есть много сходств и аспектов обратной совместимости.

0 голосов
/ 15 октября 2011

Если вы используете C ++, то используйте C ++.(cin, cout)
Почему fstream принимает c струну, меня тоже удивляет.

...