main — argc argv параметры в (программирование игр)

Еще одна «новая» вещь, которую я должен был рассмотреть сегодня вечером:

int main(argc, char *argv[])

Я не понимаю, почему я хотел бы читать из строки cmd, но вы никогда не знаете! Почему бы мне просто не использовать getline и читать это в строку? Или же getch если бы это было что-то еще?

Я подозреваю, что ответ связан с количеством кода для обработки — используя что-то вроде этого #include <string> правильно использовать меньше вычислительной мощности, верно?

РЕДАКТИРОВАТЬ: Год оглядываясь назад, я чувствую себя довольно глупо, никогда не учили о вводе строки CMD для программ в университете (я правильно знаю, какой я курс …) 🙂

0

Решение

Будучи программистом игр, я не понимаю, почему я хотел бы читать из строки cmd, но вы никогда не знаете!

Обычно для программы с графическим интерфейсом вещи, передаваемые через командную строку, имеют тенденцию быть скрытыми или отладочными.

Например, IE имеет -k переключатель командной строки, который нельзя установить в обычных настройках. Этот переключатель заставляет IE работать в режиме киоска с большим количеством отключенных вещей. Это то, что обычные пользователи никогда не должны делать, потому что если вы запускаете IE в режиме киоска, у вас нет доступа ни к чему другому (это похоже на превращение Windows в MsIeOS).

Google Chrome имеет аргумент командной строки --first-run это заставляет его повторно инициализировать пользовательские настройки и открыть диалоговое окно настроек первого запуска. Это очень полезно, если вы случайно испортили настройки Chrome.

Игры похожи. Halo2 имеет -windowed Аргумент командной строки, запускающий игру в окне вместо полноэкранного. Вот список аргументов командной строки Halo2: http://support.microsoft.com/kb/830487

Если вы не можете думать о каком-либо использовании аргументов командной строки, не используйте его. Это не значит, что другие люди не могут найти для него применение.

Для различных программ, просто гуглите «[имя программы] аргументы командной строки», чтобы узнать, что есть, если есть. Вы найдете программы, написанные людьми, которые, как и вы, не могут думать о каком-либо использовании аргументов командной строки, поэтому у программ их нет.

0

Другие решения

argc а также argv не имеют ничего общего со стандартным вводом и выводом. Если я говорю

myapp Drink More Ovaltine

argc будет 4, и argv будет содержать название программы, затем «Drink», затем «More», затем «Ovaltine».

getline просто читает данные из входного потока. Он никогда не увидит аргументы командной строки. (Нет, если вы не получили их от argv и положить их в stringstream, тем не мение. И даже тогда какой смысл?)

Что касается #include, это также не имеет никакого отношения к I / O времени выполнения. Он говорит компилятору (или, как правило, препроцессору) включить исходный файл C во время компиляции. Ты не можешь просто #include произвольный двоичный файл или что-то. (Когда включения завершены, полученная группа символов должна сформировать правильный код C ++). И во время выполнения, файл уже был включен — во время выполнения приложение даже не знает, что файл существует, и, таким образом, даже не будет думать о его чтении.

Укороченная версия:

  • argv а также argc предназначены для доступа к содержимому командной строки, используемому для запуска вашего приложения. Это вообще не связано с вводом / выводом.
  • getline используется для ввода из потока во время выполнения, и может читать практически любой файл.
  • #include используется для вставки кода C ++ во время компиляции, и может действительно использоваться только для исходного кода.

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

2

По вопросам рекламы [email protected]