// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

.C and C++ Tutorials
************************************************
- link:index_ru.html[C and C++ Tutorials]
- link:section_ru.html[]
- link:navigating-editing_ru.html[Внесение изменений и переходы в файлах исходных кодов на C/C++ - учебный курс по среде IDE NetBeans]
- link:c-unit-test_ru.html[Добавление модульных тестов в проект C - Практическое руководство по IDE NetBeans]
- link:toolchain_ru.html[Использование дескрипторов наборов средств C/C++ - Практическое руководство по IDE NetBeans]
- link:quickstart_ru.html[Краткий учебный курс по началу работы с проектами C/C++]
- link:beginning-jni-linux_ru.html[Начало работы с JNI с IDE NetBeans и подключаемым модулем C/C++ Plugin в Linux]
- link:development-environment_ru.html[Определение среды разработки проекта C/C ++]
- link:depchecking_ru.html[Проверка зависимостей с помощью утилиты make]
- link:remote-modes_ru.html[Режимы удаленной разработки C/C++ в IDE]
- link:HowTos_ru.html[Рекомендации по работе с приложениями на C/C++ для помощи при работе с кодом]
- link:remotedev-tutorial_ru.html[Удаленная разработка на C/C++ - Практическое руководство по IDE NetBeans]
- link:debugging_ru.html[Учебный курс по отладке проектов на языках C и C++]
- link:cpp-vcs_ru.html[Хранение проектов NetBeans C/C++ в системах контроля версий]
************************************************


