// 
//     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++ 和 Fortran 应用程序

当安装支持 C/C++ 的 NetBeans IDE 时，IDE 中将包括 C 和 C++ 项目类型以及相应的模板。您可以使用动态库和静态库创建 C、C++ 和 Fortran 应用程序，也可以创建基于现有源代码的 C/C++/Fortran 项目。编辑器可以缩进、补充完整 C 和 C++ 代码并能突出显示其语法，它很好地集成了 GNU gdb 调试器。

== 入门指南 

* link:../../community/releases/80/cpp-setup-instructions.html[+ 配置 NetBeans IDE 以使用 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[+在 Linux 上使用 NetBeans IDE 和 C/C++ 插件开始开发 JNI+]

*开发 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[+在 VCS 下存储 NetBeans C/C++ 项目+]

== 社区提供的文档

* link:http://wiki.netbeans.org/HowToCreate64-BitC/C++WindowsProgramWithNetBeans[+设置 NetBeans IDE 以创建 64 位 C/C++ Windows 可执行文件+]
* link:http://wiki.netbeans.org/Talk:HowToSetup64-BitQt5WithNetBeans7.4OnWindows[+在 Windows 上设置 64 位 Qt 5 以用于 NetBeans IDE+]

== 其他资源

* 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++ 邮件列表+]
