C言語とGo言語の違いは何ですか?

青灯夜游
リリース: 2023-01-03 09:27:38
オリジナル
9509 人が閲覧しました

相違点: 1. C 言語のソース ファイルの拡張子は「.h」および「.c」で、Go 言語のソース ファイルの拡張子は「.go」です。 2. C 言語ではコードはファイルで管理されますが、Go 言語ではコードはパッケージで管理されます。 3. C 言語のキーワードは合計 32 個、Go 言語のキーワードは合計 25 個あります。

C言語とGo言語の違いは何ですか?

このチュートリアルの動作環境: Windows 7 システム、c99&&GO バージョン 1.18、Dell G3 コンピューター。

ソースファイル比較

  • C言語ソースファイル
ファイル拡張子 ソースタイプ
.h コード宣言を格納するヘッダーファイル
.c C 言語ソース ファイル、コード実装を格納
    #Go 言語ソース ファイル
ファイル拡張子 #ソース タイプ #.go
Go 言語ソース ファイル、コードの実装
#コード管理の比較

##C 言語のファイルによるコード管理

When特定の関数を使用したい場合は、対応する .h ファイルをインクルードするだけで済みます。
    • Go 言語はパッケージを使用してコードを管理します
    Go 言語には .h がありませんファイルの概念。Go で特定の関数を使用したい場合、対応するパッケージをインポートするだけで済みます。
    • C 言語による関数と変数のパブリックおよびプライベート管理
    extern および static を使用して関数と変数を公開するかどうか
    • Go 言語での関数と変数のパブリックおよびプライベート管理
    大文字化を使用して関数を公開するかどうか関数名の最初の文字
  • 変数名の最初の文字の大文字と小文字を区別して変数を公開するかどうかを実現
    ##比較キーワードの数

C 言語には合計 32 のキーワードがあります

  • #1
23 ##if##スイッチケースデフォルト休憩戻るwhiledoublesigned#unsigned##const# #autoregisterstaticexternvolatile5
4 5 6 7 8
##else ##goto ##do for
##継続 typedefstruct enumunion charshortint #long float
void sizeof
Go 言語キーワードの合計 25 #1 2 3 4
6
  • 7
8##場合 ##casedefaultfor#structconstfuncimportpackageselect #データ型の比較C 言語のデータ型
##else switch
##break #return ##goto fallthrough ##続行 タイプvar
mapinterfacerangedefergo chan



Go 言語のデータ型



C 言語の各データ型はメモリ領域を占有します

タイプ32 ビット コンパイラ

#64 ビット コンパイラ
  • ##charC言語とGo言語の違いは何ですか?

    1
  • 1

    C言語とGo言語の違いは何ですか?int

    4
4
  • float
44ダブル88short22long48長い長い88
##void* 4 8# ##################################
  • Go 言語の各データ型はメモリ領域を占有します
##int8/uint811##int16/uint1622signed short/unsigned short481 4444811# # および C 言語 同様に、Go 言語でも変数のメモリ空間を計算する Sizeof が提供されています。
タイプ 32 ビット コンパイラ 64 ビット コンパイラ #エッセンス
## signed char/unsigned char
#int32/uint32
4 signed int/unsigned int int64/ uint64
8 符号付きlong long int/符号なしlong long int byte
1 uint8/unsigned char rune
4 int32/ signed int int
8 マシン桁数に応じて長さを決定します uintptr
8 マシン桁数に応じて長さ uint32/uint64 を決定します float32
4 float float64
#8 double true
1 char 型の整数型 false
1 char型整数
1. インポート "unsafe" パッケージをインポートします
  • 2. unsafe を通じて変数のメモリ空間を計算します。 Sizeof()
  • Go 言語の基本データ型の内部実装

golang 公式サイトから go1.4 バージョンのソースコードをダウンロード
  • 古いバージョンのコードは純粋であるほど、初心者の学習に適しています。
    • コードは更新され反復されると、徐々に非常に複雑になります。バージョン 1.4 をダウンロードすることを推奨します。
      • 解凍後、パスを開きます:
      go\src\runtime\runtime.h

    次の実装コードを取得しますC言語とGo言語の違いは何ですか?

      // 第8行到35行
      typedef signed char     int8;
      typedef unsigned char       uint8;
      typedef signed short        int16;
      typedef unsigned short      uint16;
      typedef signed int      int32;
      typedef unsigned int        uint32;
      typedef signed long long int    int64;
      typedef unsigned long long int  uint64;
      typedef float           float32;
      typedef double          float64;
      
      #ifdef _64BIT
      typedef uint64      uintptr;
      typedef int64       intptr;
      typedef int64       intgo; // Go's int
      typedef uint64      uintgo; // Go's uint
      #else
      typedef uint32      uintptr;
      typedef int32       intptr;
      typedef int32       intgo; // Go's int
      typedef uint32      uintgo; // Go's uint
      #endif
      
      #ifdef _64BITREG
      typedef uint64      uintreg;
      #else
      typedef uint32      uintreg;
      #endif
      
      // 第153行到157行
      enum
      {
          true    = 1,
          false   = 0,
      };
      ログイン後にコピー
    • インストール B モーメント:
    本質Go は、C 言語で書かれた高級プログラミング言語です。だから、江兄弟は以前にあなたに C 言語を教えました。今日の Go の実装コードを理解できるようにするには、それが何なのか、そしてなぜそれが行われるのかを知る必要があります


    #定数変数の比較

    ## C 言語では定数と変数の形式が定義されています
    #
    数据类型 变量名称 = 值;
    const 数据类型 常量名称 = 值;
    ログイン後にコピー

    Go 言語は定数と変数の形式を定義します

    次の標準形式に加えて、Go 言語はいくつかの単純な構文も提供します Sugar
    var 变量名称 数据类型 = 值;
    const 变量名称 数据类型 = 值;
    ログイン後にコピー
      • コメントの比較
    • C 言語と同様に、Go 言語も単一行コメントと複数行コメントをサポートしており、すべてのコメントは C 言語と同じ特性を持っています

    単一行コメント行コメント

    //コメントされたコンテンツ

    複数行コメント
      /*コメントされたコンテンツ* /
      • Go 言語の場合、複数行コメントではなく単一行コメントを使用することが公式に推奨されています (詳細については、Go 公式ソース コードを直接表示できます)
      • 演算子の比較
    • 算術演算子は C 言語とほぼ同じです

    Go 言語では -- 演算子は前置詞をサポートしていません

    間違った書き方: i; --i;

    • Go 言語では、-- は式ではなくステートメントであるため、単独の行に記述する必要があります
      • 間違った方法書き込み : a = i ; return i ;
        • #演算子
      • 説明
    AddA B- 減算A - B*乗算A * B/割り算##%余りを求める増分 デクリメント関係演算子は C 言語と同じですOperatorDescription
    ##B / A
    # #B % A
    A --
    A--

    Instance
    ##====2 つの値が正しいかどうかを確認します等しい場合は True を返し、そうでない場合は False を返します。 A == B!=2 つの値が等しくないかどうかを確認し、等しくない場合は True を返します。それ以外の場合は False を返します。 A != B>左の値が右の値より大きいかどうかを確認し、大きい場合は True を返し、そうでない場合は False を返します。 A > B左の値が右の値より小さいかどうかを確認し、小さい場合は True を返し、そうでない場合は False を返します。 A A >= B##左の値が右の値以下かどうかを確認し、そうであれば True を返します、それ以外の場合は False を返します。 A
    • 逻辑运算符和C语言一样
    ##>= 左の値が右の値以上であるかどうかを確認し、そうであれば True を返します。それ以外の場合は False を返します。
    运算符 描述 实例
    && 如果两边的操作数都是 True,则条件 True,否则为 False。 A && B
    || 如果两边的操作数有一个 True,则条件 True,否则为 False。 A || B
    ! 如果条件为 True,则逻辑 NOT 条件 False,否则为 True。 !A

    • 位运算符和C语言几乎一样
      • 新增一个&^运算符
    运算符 描述 实例
    & 参与运算的两数各对应的二进位相与, 对应位只要都是1结果就为1 A & B
    | 参与运算的两数各对应的二进位相或,对应位只要其中一个是1结果就为1 A | B
    ^ 参与运算的两数各对应的二进位相异或,对应位只要不同结果就是1 A ^ B
    左移运算符,左移n位就是乘以2的n次方 A
    >> 右移运算符,右移n位就是除以2的n次方 B >> 2
    &^ 逻辑清零运算符, B对应位是1,A对应位清零,B对应位是0, A对应位保留原样 A &^ B
    int main(){
        /*
          0110      a
        &^1011      b 如果b位位1,那么结果为0, 否则结果为a位对应的值
        ----------
          0100
        */
        a1 := 6
        b1 := 11
        res1 := a1 &^ b1
        fmt.Println("res1 = ", res1) // 4
    
        /*
          1011      a
        &^1101      b 如果b位位1,那么结果为0, 否则结果为a位对应的值
        ----------
          0010
        */
        a2 := 11
        b2 := 13
        res2 := a2 &^ b2
        fmt.Println("res2 = ", res2) // 2
    }
    ログイン後にコピー

    • 赋值运算符和C语言几乎一样
      • 新增一个&^=运算符
    运算符 描述 实例
    = 将右边赋值给左边 C = A + B 将 A + B 表达式结果赋值给 C
    += 相加后再赋值 C += A 等于 C = C + A
    -= 相减后再赋值 C -= A 等于 C = C - A
    *= 相乘后再赋值 C *= A 等于 C = C * A
    /= 相除后再赋值 C /= A 等于 C = C / A
    %= 求余后再赋值 C %= A 等于 C = C % A
    左移赋值 C
    >>= 右移赋值 C >>= 2 等于 C = C >> 2
    &= 位逻辑与赋值 C &= 2 等于 C = C & 2
    ^= 位逻辑或赋值 C ^= 2 等于 C = C ^ 2
    |= 位逻辑异或赋值 C |= 2 等于 C = C | 2
    &^= 位逻辑清零赋值 C &^= 2 等于 C = C &^ 2

    流程控制语句对比

    • C语言流程控制中的if、switch、for在Go语言都可以使用
    • C语言中的四大跳转语句return、break、continue、goto在Go语言都可以使用
    • Go语言除了实现C语言中if、switch、for、return、break、continue、goto的基本功能以外,还对if、switch、for、break、continue进行了增强
      • 例如: if 条件表达式前面可以添加初始化表达式
      • 例如: break、continue可以指定标签
      • 例如: switch语句可以当做if/elseif来使用
      • ... ...
    • 值得注意的是Go语言中没有while循环和dowhile循环, 因为它们能做的Go语言中的for循环都可以做

    函数和方法对比

    • C语言定义函数格式
    返回值类型 函数名称(形参列表) {
            函数体相关语句;
            return 返回值;
    }
    ログイン後にコピー
    • Go语言定义函数格式
    func  函数名称(形参列表)(返回值列表) {
            函数体相关语句;
            return 返回值;
    }
    ログイン後にコピー
    • C语言中没有方法的概念, 但是Go语言中有方法
      • 对于初学者而言,可以简单的把方法理解为一种特殊的函数
    func  (接收者 接受者类型)函数名称(形参列表)(返回值列表) {
            函数体相关语句;
            return 返回值;
    }
    ログイン後にコピー

    编程思想对比

    • C语言是一门面向过程的编程语言
      • 面向过程: 按部就班, 亲力亲为,关注的是我应该怎么做?
      • 做饭例子: 面向过程做饭
        • 1.上街买菜
        • 2.摘菜
        • 3.洗菜
        • 4.切菜
        • 5.开火炒菜
        • 6.淘米煮饭
        • 7.吃饭
    • Go语言是门面向对象的编程语言
      • 面向对象:化繁为简, 能不自己干自己就不干,关注的是我应该让谁来做?
      • 做饭例子: 面向对象做饭
      • 1.找个会做饭女朋友 or 男朋友
      • 2.老婆我饿了 or 老公我饿了
      • 3.躺着...等她/他把饭做好
      • 4.吃饭
    • 不要把面向过程和面向对象想象得那么神奇, 它们只是思考问题的方式不同而已

    更多编程相关知识,请访问:编程视频!!

    以上がC言語とGo言語の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    関連ラベル:
    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    最新の問題
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート