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)) // 4CFLAGS 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
package main
/*
// C kodu buraya
*/
import "C"
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
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
/*
#cgo ____: -lm
#include <math.h>
*/
import "C"
/*
#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 |