// 
//     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/C++
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Учебная карта по приложениям на C/C++ - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Учебная карта по приложениям на C/C++


== Разработка приложений на C, C++ и Фортране

При установке IDE NetBeans с поддержкой C/C++, среда включает IDE типы проектов для C и C++ и соответствующие шаблоны. Существует возможность создания приложений на C, C++ и Фортране с динамическими и статическими библиотеками, а также проектов на C, C++ и Фортране на основе существующего кода. С помощью редактора можно выполнить вставку отступов, автозавершение и выделение синтаксиса кода C/C++. Кроме того, редактор тесно интегрирован с отладчиком GNU gdb.

== Начало работы 

* link:../../community/releases/80/cpp-setup-instructions.html[+ Настройка IDE NetBeans для C/C++/Fortran+]

== Учебные курсы и статьи

=== Создание проектов на языках C и C++

* link:../docs/cnd/quickstart.html[+Краткий учебный курс по работе с проектами C/C+++]
* link:../docs/cnd/development-environment.html[+Определение среды разработки проекта C/C +++]
* link:../docs/cnd/beginning-jni-linux.html[+Начало работы с JNI с IDE NetBeans и подключаемым модулем C/C++ Plugin в Linux+]

=== Разработка проектов на языках C и C++

* link:../docs/cnd/navigating-editing.html[+Учебный курс по внесению изменений и переходам в исходных файлах C/C+++]
* link:../docs/cnd/debugging.html[+Учебный курс по отладке проектов на языках C и C+++]
* link:../docs/cnd/remote-modes.html[+Режимы удаленной разработки на языке C/C+++]
* link:../docs/cnd/remotedev-tutorial.html[+Учебный курс по удаленной разработке на языке C/C+++]
* link:../docs/cnd/c-unit-test.html[+Добавление модульных тестов к проекту C/C+++]

== Учебные курсы и статьи

=== Указания по разработке проектов на языках C и C++

* link:../docs/cnd/HowTos.html[+Указания по разработке приложений, написанных на C/C+++]
* link:../docs/cnd/depchecking.html[+Выполнение проверки зависимостей+]
* link:../docs/cnd/toolchain.html[+Использование дескрипторов наборов средств C/C+++]
* link:../docs/cnd/cpp-vcs.html[+Сохранение проектов NetBeans C/C++ в VCS+]

== Документы от сообщества

* link:http://wiki.netbeans.org/HowToCreate64-BitC/C++WindowsProgramWithNetBeans[+Настройка IDE NetBeans для создания 64-разрядных исполняемых файлов C/C++ для Windows+]
* link:http://wiki.netbeans.org/Talk:HowToSetup64-BitQt5WithNetBeans7.4OnWindows[+Настройка 64-разрядной версии Qt 5 в Windows для работы с IDE NetBeans+]

== Другие источники

* link:../72/cnd/index.html[+Документация по языкам C/C++ для более ранних версий+]
* link:http://wiki.netbeans.org/NetBeansUserFAQ#NetBeans_C.2FC.2B.2B_Development_Pack[+Часто задаваемые вопросы по подключаемым модулям NetBeans C/C+++]
* link:https://netbeans.org/projects/cnd/lists[+Рассылки по NetBeans C/C+++]
