C/C++、C#、JAVA(一):代码模板与库代码的引入
代码默认模板
编译性高级编程语言中,几乎每种语言,都有个静态的 main 方法作为程序启动入口,每种语言都有其编写规范。为了学习 C/C++、C#、JAVA四种语言,我们要先从默认代码模板中,慢慢摸索学习。
约定: 我们常常可以看到 函数、方法这两个词,很多人对此进行了混用。 方法,就是
void Test(){}这样的形式; 函数,指具有确定命名的、并且可以通过名称调用的代码,属性、字段、方法、委托、事件等; 只要能够通过确定的名称调用(使用)的代码块,就是函数;而方法就是 返回值、名称、参数等组成的代码块;
C/C++、Java 主要是 驼峰命名(Camel-Case), C# 是Pascal 规则(帕斯卡命名)。 文章代码和示例比较多,对于命名这方面,可能不会严格按照此语言的规范编写。(主要是笔者习惯写C#)
代码模板
C
#include <stdio.h> int main() { /* 代码 */ return 0; }
C++
#include <iostream> using namespace std; int main() { /* 代码 */ return 0; }
C#
using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) { /* 代码 */ } } }
JAVA
package com.company; import com.company.test.*; public class Main { public static void main(String[] args) { Test test = new Test(); } }
C# 和 Java 的
main方法都是静态入口。 C# 的
main方法是大写,其余语言都是小写。
库代码的引入和解析
每种编程语言中,例如 sdk 等都会有大量丰富的官方库代码已经自定义库代码,那么,我们应该如何引入使用呢?
C
C语言 源文件以
.c或
.h结尾,一般
.h用来定义成员,
.c用来实现成员。
.c称为源文件,
.h称为头文件。
C语言中,使用
#include "{文件名称}.{.c|.h}"或
#include <{文件名称}.{.c|.h}>来使用系统或自定义的库代码。 简单来说,
#include <>是使用系统自带的代码,
#include ""是使用你自己写的代码或第三方代码。 请参考 http://c.biancheng.net/view/443.html
写代码和编译时,
.c和
.h文件和里面的代码没有任何联系。
C语言 中没有接口(面向对象),因此考虑到解耦,将函数的定义和实现两个部分分开,
.h文件定义外界可以访问使用的成员,以及如何调用成员。
.c实现
.h中声明名的成员。
那么,如何使用
.h和
.c声明和实现函数,并且能给外部使用呢?
实现 .h
、.c
以及外部调用
编写一个
Test.h文件。 此文件声明了一个
getA方法,不需要输入参数,会返回一个 int 类型的值。 extern 关键字,声明了此方法能够被外部调用。
#include <stdio.h> extern int getA(void);
我们在 main 方法中,使用此方法
#include <stdio.h> #include "Test.h" int main() { int a = getA(); printf("%d",a); return 0; }
然后来实现
Test.c
#include <stdio.h> // 实现 getA方法 int getA(void) { return 666; }
以上代码就是
.h、
.c文件的编写方法以及提供外部调用。
.h
和 .c
文件
前面我说了,
.h、和
.c文件,没有必然联系。下面我来解释一下。
因为
.h和
.c不像 C#、JAVA 中的 接口和继承,没有强制规定,因此可以只写
.h,或只写
.c。
.h也可以实现代码,例如
Test.h文件
#include <stdio.h> extern int getA(void) { return 666; }
C语言的编译,经历预处理/预编译、编译、汇编、链接四个步骤。 预处理/预处理(Preprocessing):条件编译、宏定义处理等 编译(Compilation): 检查语法,生成汇编 汇编(Assemble):汇编代码转换机器码 链接(Linking):与其它组件组合起来生成可执行文件 资料参考 http://c.biancheng.net/view/1736.html
https://www.geek-share.com/detail/2590170698.html
.h和
.c文件,在最后链接阶段,才会出现真正
联系。 请参考 https://www.geek-share.com/detail/2544082340.html
C++
据说 C++ 之父 Bjarne Stroustrup 博士,都没有搞懂 C++ 这种编程。
C++ 源文件后缀为
.cpp。
C++ 中,我们看到了
#include <iostream>,为啥不带
.h或
.c? C++ 是 C语言 的超集,C++ 实现了面向对象,C++ 出现了命名空间和库的概念。 在 C++ 中,
#include <stdio.h>是一般的头文件引用方式;而
#include <iostream>是 C++ 库的引用方式。引用的是
标准库。
C++ 标准库分为两部分:
标准函数库: 继承C语言,由不属于类的函数组成。 面向对象类库: 类及其相关函数的集合。
命名空间
前面我们看到了 C++ 代码模板中,还有
using namespace std;,这一句是引用命名空间。
在 c++ 中,也可以直接实现
.h声明的 函数,但是这样跟不能体会到 面向对象 的优势。
C++ 使用面向对象,采用 命名空间-类-成员实现 的机构,来编写代码,示例如下。 编写 Test.h
namespace first_space { int func(); }
编写 Test.c
namespace first_space { int func() { return 666; } }
main 函数中调用
#include <iostream> #include "Test.h" using namespace std; using namespace first_space; int main() { int a = func(); // first_space cout << a << endl; return 0; }
可以看到,命名空间只是多了个范围限定。 在 C++ 中,函数可以定义在类中,命名空间中,也可以直接写在 源文件中。
C#
C# 是笔者最喜欢的语言,嘿嘿嘿。 C# 中类库编译后,是一个
.dll文件。
以下是 C# 命名空间和引用命名空间的示例。
namespace ConsoleApp1 { using Test; class Program { static void Main(string[] args) { T666 t = new T666(); t.Test(); } } } namespace Test { public class T666 { public void Test(){} } }
C# 中,命名空间没有严格要求。 一般,命名空间以
[项目名称].[目录名称].[目录名称]...组成。 以项目名称开头,后面每个子目录名称组成。 例如要实现用户身份认证的功能,将这部分代码放到
MyProj/Auth目录中,那么命名空间就是
MyProj.Auth。 C# 的源文件以
.cs结尾,一般来说,一个独立功能的类或接口,使用一个
.cs文件。 但 C# 中,并不强制要求。这些慢慢学习 C# 时会学习了解到。很大程度上跟 C++ 的命名空间相似。
C# 中以命名空间作为限定范围,对类进行使用。 调用的最小粒度为类、结构体、枚举等。 所有的字段、属性、方法等必须在类中定义和实现。 C# 引入一个命名空间后,便能使用此命名空间的所有的类。
Java
Java 的规则还是比较多的。 Java 的源文件,以
.java结尾。 每个
.java文件中,只能有一个 public 类,并且类名称必须跟
.java文件的名称相同。 Java 中,没有命名空间,而是以包的形式来调用,包名引用严格以目录名称设置。
Java 中,使用
import关键字来引入包,例如
import java.io.*;。 有两种引用形式,一种是引用具体的类名
import java.io.PrintStream;
之后便可以使用 PrintStream 类。 另一种是使用
import java.io.*;,可以使用此包下所有的类。
Java 中,标准库以
java.或
javax.开头。
如果想将编写的类提供给外部使用,则要使用
package关键字。
以下为一个示例.
程序目录结构如下
. │ main │ └─com └─company │ Main.java │ MyFrame.java │ └─test Test.java Test2.java
编写两个类,Test,Test2,
# Test package com.company.test; public class Test { public void My() { Test2 t = new Test2(); } } # Test2 package com.company.test; public class Test2 { }
main 函数中调用调用
package com.company; import com.company.test.*; public class Main { public static void main(String[] args) { Test test = new Test(); } }
- NppAStyle代码格式化插件(C/C++/C#/JAVA)
- NppAStyle代码格式化插件(C/C++/C#/JAVA)
- 介绍一个 C/C++ 、C#、JAVA 代码美化工具
- C++、C#、JAVA中模板与泛型
- java鬼混笔记:springboot之thymeleaf 5:模板引入与删除代码
- C#和Java的泛型、C++模板、C#的constraints特性以及弱类型化和强类型化的问题(转)
- Xcode 5 中引入 C++ 模板代码无法编译通过的问题解决
- C、C++、python、Java、php、C#六种语言连接mysql数据库代码
- NppAStyle代码格式化插件(C/C++/C#/JAVA)
- UML工具推荐 Poseidon版本 可以免费下载,自动生成代码 C++ Java C# VB.NET等 (来自德国汉堡的国际性建模软件开发商Gentleware AG的)
- 介绍一个 C/C++ 、C#、JAVA 代码美化工具
- 介绍一个 C/C++ 、C#、JAVA 代码美化工具
- NppAStyle代码格式化插件(C/C++/C#/JAVA)
- 介绍一个 C/C++ 、C#、JAVA 代码美化工具
- C#中调试C++代码(C++的DLL是通过Import引入的)
- NppAStyle代码格式化插件(C/C++/C#/JAVA)
- 介绍一个 C/C++ 、C#、JAVA 代码美化工具
- C++、Java/C#之比较
- [导入]C#分析数据库结构,使用XSL模板自动生成代码
- C#相对于C++、Java全新在哪里