CodeBlanks Logo Icon CodeBlanks

C kodu çağırma

  • Go kursu
  • İleri seviye
  • Ders 14/68
  • 4 dk

import "C" bloğuyla C fonksiyonu çağırmayı öğrenirsin.

Önsöz ve C başlıkları

import "C"'nin üstündeki yorum (önsöz) #include satırları da içerebilir. Böylece standart C kütüphanesindeki fonksiyonları çağırabilirsin.

/*
#include <stdlib.h>
*/
import "C"

n := C.abs(-5)  // 5

Önsöz ile import "C" arasında boş satır olmamalıdır; boş satır olursa yorum C kodu sayılmaz.

#cgo yönergeleri

Harici bir kütüphaneye bağlanmak için önsözde #cgo satırları kullanılır:

/*
#cgo LDFLAGS: -lm
#include <math.h>
*/
import "C"

fmt.Println(C.sqrt(16))  // 4

CFLAGS derleyiciye, LDFLAGS bağlayıcıya seçenek iletir; pkg-config: ile kütüphane ayarları otomatik alınabilir.

Uygulama Standart C fonksiyonu

Önsözde #include <stdlib.h> ekle. C.abs(-12) sonucunu yazdır.

Başlangıç kodu

main.go
package main

/*
// C kodu buraya
*/
import "C"

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

/*
#include <stdlib.h>
*/
import "C"

import "fmt"

func main() {
    fmt.Println(C.abs(-12))
}

Beklenen çıktı

12

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Önsözle <code>import "C"</code> arasına boş satır koyarsan ne olur?

  • Kod daha hızlı derlenir
  • C kodu iki kez derlenir
  • Yorum C kodu sayılmaz, fonksiyonlar bulunamaz Doğru cevap
  • Hiçbir şey değişmez

Açıklama: cgo yalnızca import "C"'ye doğrudan bitişik yorumu önsöz kabul eder; arada boş satır varsa C.fonksiyon tanımsız kalır.

2 Bağlayıcı seçeneği

Soru
/*
#cgo ____: -lm
#include <math.h>
*/
import "C"
Cevap
/*
#cgo LDFLAGS: -lm
#include <math.h>
*/
import "C"

Açıklama: LDFLAGS bağlayıcıya -lm gibi kütüphane seçeneklerini iletir.

3 Önsöz satırları

Kavram Anlamı
#include <stdio.h> C başlığı ekler
#cgo CFLAGS Derleyici seçeneği
#cgo LDFLAGS Bağlayıcı seçeneği
#cgo pkg-config Ayarları otomatik alır

İleri seviye bölümündeki tüm dersler