Пробелам нет!

Nov 03, 2014 05:08

- Хотим пробелы в именах файлов!
- Получите.
- Ой, а как теперь передавать такие имена в коммандной строке, ведь пробелы отделяют параметры программы друг от друга? Нам нужен параметр - имя с пробелом, а не два неправильных параметра вместо этого одного!
- Поправили. Добавьте слева и справа от имени по двойной кавычке.
- Супер! Хотя, нет, не супер. А если мы хотим внутри параметра двойную кавычку? Эта же кавычка разобьёт параметр на несколько!
- Поправили. Добавьте перед внутренней кавычкой обратную косую черту (\).
- Ага. Работает. Хотя, нет. А если у нас параметр кончается на обратную косую черту и мы к ней приставим двойную кавычку (необходимую из-за пробелов), то тогда комбинация \" в конце параметра не будет распознана как конец параметра, и параметр объединится со следующим параметром!
- Поправили. Удвойте косую черту.
- Ура, работает! Но ж ё* вашу мать, как теперь всё сложно!

А ведь наверное могли бы с самого начала сделать как в строковых литералах в C: вставить \ перед каждым пробелом и перед каждым уже имеющимся \, не прибегая к использованию третьей сущности, двойной кавычки. Сейчас там такая каша образовалась... Каждый с этими кавычками и косыми чертами борется по своему и с переменным успехом.


* Microsoft: Parsing C++ Command-Line Arguments
* Geoff Chappell: White Space in LINK.EXE Directives
* François Gouget: wine: ' ' & '"' handling in the command line
* Uwe Bonnes: wine: [msvcrt] Testcase and implementation for __getmainargs
* David Deley: How Command Line Parameters Are Parsed

msft, design, sad, c++, software, effectiveness, c, usability

Previous post Next post
Up