Я редактирую C с Vim в консоли. Я использую make-файлы и имею много компиляторов для тестирования моего кода против, включая gcc, лязг (LLVM) и ICC. Другие вещи я рассматриваю часть своей среды разработки: использование grep, отладчиков и valgrind. Язык сценариев для более сложных сборок. Мерзавец для управления версиями.
Более важный в моем уме, чем то, что Вы используете для редактирования кода, - то, как Вы структурируете свой код. Как разметить, который является, вероятно, вопросом для Переполнения стека, но, поскольку Вы спросили, у меня часто есть отдельный каталог для объектного кода не для распределения и другой папки для результанта binar (y|ies). У меня есть папка тестирования, которая содержит больше файлов C, которые используют весь общий код, который я пишу и они я valgrind, наряду с заключительным файлом проекта.
Соответствующий раздел руководства удара перечисляет 5 различных конструкций, которые могут использоваться для условной оценки. Из них, if
, case
, и [[ .. ]]
конструкции, вероятно, обычно используются в реальном коде, хотя (( .. ))
конструкция будет часто привыкать в сценариях, которые делают сложный подсчет или другие числовые операции.
Но они не упоминают другую очень стандартную форму, используемую для ветвления в ударе, который должен просто выполнить команду в сочетании с оценкой короткого замыкания, например
grep -q needle haystack.txt && echo "Needle located!" || echo "No dice or needles.";
&&
и ||
логические операторы: "и" и "или" соответственно.
Это - эффективно то же как
if grep -q needle haystack.txt; then echo "yea"; else echo "nay"; fi;
но работы по-другому: в первой форме условная логика действительно появляется как побочный эффект фактической явной цели кода, который должен, по крайней мере якобы, оценить логические операторы. Этот вид конструкции также обычно замечается в C и коде JavaScript.
Это работает путем поиска легких путей: части выражения, например. x && y || z
, оценены слева направо. Если левая сторона логического и, например, x
в x && y
, оценивает ко лжи, bash
не потрудился оценивать y
часть, потому что в той точке это уже знает это x && y
ложь.
Обратное верно для логического ors: true || z
всегда оценивает к истинному, независимо от того, чем оказывается z.
Таким образом, если grep
выходит ложь, bash
может пропустить это сначала echo
, потому что та часть выражения не может возможно быть верной. Таким образом, это идет дальше к второму echo
. С другой стороны, если grep является верным, первым echo
выполняется (приводящий к тем, ну, в общем, отражаемым словам..). В этой точке bash
сделан, потому что безотносительно значения правой стороны ||
, результат выражения все еще будет верен.
Для получения ощущения пути работы удара с условными выражениями, лучше делать некоторое экспериментирование на командной строке. Команда
echo $?;
повторит код возврата предыдущего оператора. Это - код ошибки, таким образом, 0
верное средство, и ненулевое значение означает ложь. Это немного сбивает с толку сначала, но Вы привыкаете к нему.
Таким образом, можно сделать, например
$ (( 1 + 2 == 3 )); echo $?
0
$ (( 1 + 2 == 4 )); echo $?
1
и выполните подобные тесты с [[ .. ]]
создайте для получения ощущения этих основных стандартных блоков. После того как Вам сделали это, движение к if
и затем case
операторы.
Что касается ответа на Ваш вопрос, ну, в общем, я думаю, что это очень зависит от контекста, в котором его спросили. Но получение хорошего понимания различных вариантов должно помочь Вам выяснить то, что они ищут там.