// 
//     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:remotedev-tutorial_zh_CN.html[C/C++ 远程开发 - NetBeans IDE 教程]
- link:quickstart_zh_CN.html[C/C++ 项目快速入门教程]
- link:index_zh_CN.html[C and C++ Tutorials]
- link:remote-modes_zh_CN.html[IDE 中的 C/C++ 远程开发模式]
- link:section_zh_CN.html[]
- link:toolchain_zh_CN.html[使用 C/C++ 工具集合描述符 - NetBeans IDE 教程]
- link:HowTos_zh_CN.html[关于代码帮助的 C/C++ 应用程序指导]
- link:beginning-jni-linux_zh_CN.html[在 Linux 上使用 NetBeans IDE 和 C/C++ 插件开始开发 JNI]
- link:cpp-vcs_zh_CN.html[在版本控制系统下存储 NetBeans C/C++ 项目]
- link:development-environment_zh_CN.html[定义 C/C++ 项目的开发环境]
- link:c-unit-test_zh_CN.html[将单元测试添加到 C 项目 - NetBeans IDE 教程]
- link:depchecking_zh_CN.html[执行依赖关系检查]
- link:navigating-editing_zh_CN.html[编辑和导航 C/C++ 源文件 - NetBeans IDE 教程]
- link:debugging_zh_CN.html[调试 C/C++ 项目教程]
************************************************


