C de programlamayı öğrenme (Python'dan geliyor) [kapalı]


22

Bu soruyu sormak için yanlış yer ise, lütfen bana bildirin.

Ben bir Python programcısıyım. C'yi öğrenmeyi çok isterdim. Gerçekten, birçok kez denedim, ama her zaman cesaretimi kırdım. Python'da birkaç satır yazıyorsunuz ve program harikalar yaratıyor. C’de işe yarar bir şey yapamadım gibi gözüküyor.

İnternete bağlanmak bile çok karmaşık görünüyor.

C öğrenmek için neler yapabileceğim konusunda bir önerin var mı? İyi web siteleri var mı? Güzel projeleriniz var mı?

Teşekkürler


4
Dahının omuzlarına dayanabilmek güzel, değil mi? Python tercümanı C ile yazılmıştır. Artık tasarımcıların gerçekte yaptıkları için gerçek bir takdiriniz var. Güzel, inanılmaz bir parmak.
Pemdas

@Pemdas C normalde sistem programları oluşturmak için kullanılır.
Searock

Bir dosyanın içeriğini okuyarak ve muhtemelen başka bir dosyaya bazı temel dönüşümler yaparak başlamayı önerebilir miyim? Örnek: Bir CSV'yi alın ve sekmeyle ayrılmış bir dosyaya yerleştirin. Alternatif olarak, başlık bilgilerinin BMP JPEG görüntü dosyasından nasıl okunacağını da öğrenebilirsiniz.
Joshua Burns,

Cevap eklemek için geç kaldım, ancak Python Programları kitapçığı için bu çevrimiçi C var . Ayrıca, "Zor yoldan programlamayı öğrenin" yapımcıları, zaten biraz piton veya benzeri bilenleri hedef alan " Zor Yoldan Öğrenin " adlı bir kitap yapıyorlar .
naught101

Yanıtlar:


31

Cesaretini kırma.

Python, üst düzey bir programlama dilidir. C ile karşılaştırıldığında, küçük miktarda kodda harikalar yaratabilir . C'deki Python sonuçlarını taklit etmeye çalışarak başlamayın - derhal bulaşık yersiniz. Bir C'de programlama, farklı bir düşünme ve anlama tarzı gerektirir, çünkü bilgisayarla daha samimi bir düzeyde etkileşim kurarken. İşte C öğrenme için iyi bir başlangıç ​​noktası:

Kitaplar

Çevrimiçi Malzeme


1
Bir programlama alıştırması önerebilir misiniz? Tercihen yararlı bir şey. Teşekkürler.
Honza Pokorny

12

C öğrenmek istiyorsanız, İnternete bağlanmakla başlamayın. Bunu başka bir dilde yapabilirsiniz. C de en önemli olan bu değil.

Bunun yerine, bu C Eğitiminde işaretçilere, dizilere, referanslara ve yapılara göz atın . Bu, hafıza yönetimini ve "sizi makineye daha da yakınlaştırmak" özelliklerinin birçoğunu anlamanıza yardımcı olacaktır.

Bu materyali öğrenip anlayabiliyorsanız, olası bir projeye doğru genişlemeye bakın. Bu kavramlar herhangi bir gerçek profesyonel C programlaması için temeldir.

Bu Pointer Öğretici de yararlı görünüyor.


C_Tutorialbağlantı ... bozuldu
user3768495

11

O olduğu çok internete bağlanmak için karmaşık! Bunu düşün:

  • Bilgisayarınızın birden çok bağlantı yolu olabilir - WLAN, Bluetooth, Ethernet, vb. Bunların her birinin ayarlamanız gereken kendi ayarları vardır. Bunun için zaten standartlar ve sürücüler olduğu için şanslısınız ... bunları kullanmak şu an olduğundan çok daha zor olabilir .

  • IP adresleri IPv4 veya IPv6 olabilir ve her ikisini de yapabilmeniz gerekir.

  • Sistem için yapılandırılmış proxy'ler olabilir veya olmayabilir.

  • FTP, HTTP veya başka bir protokolü desteklemelisiniz.

  • Çevirmeli bağlantı kullanmanız gerekebilir, bu nedenle daha önce bağlı değilseniz şifreleriniz ve telefon numaralarınızla bir telefon rehberi belirlemeniz gerekir. WLAN kullanıcı adları / şifreler ile aynı.

  • Çerezlerle çalışmanız gerekebilir.

  • Sistem bazı verileri önbelleğe alabilir, bu nedenle önbelleği kullanmak ister misiniz?

ve liste uzayıp gidiyor.

Bu yüzden Python ile bunları yapmanın kolay olması, mutlaka bunların çoğunun sizden saklandığı (ya da ayarlanması zor) olduğu anlamına gelir, bu nedenle güç için basitlik ticareti yaparsınız. C kütüphanesi tam tersidir: İhtiyacınız olan tüm güce sahiptir (sistem çağrılarını kolayca yapabilirsiniz), ancak herhangi bir varsayılana (veya aslında, internete bağlanmak için herhangi bir özelliğe sahip değildir) sahip değildir .

C'yi sıkıcı olarak düşünmek yerine, onu güçlü olarak düşünün. Ama her durumda, yok yapmak çok çok önemli zor bir şey - onunla internete bağlanmayı deneyin. Bunun yerine, daha temel (örneğin dosya G / Ç) için kütüphane nasıl kullanılacağını öğrenmeye başlamak, nasıl gerçekten işaretçi ve diziler çalışmaları hakkında bilgi edinmek ve tüm bu öğrendiğinizde, daha sonra büyük projeleri mücadele deneyin. Python'u da bu şekilde takdir edeceksiniz. :)


Düzenle :

Şahsen, boş vaktiniz varsa, ilk önce C # öğrenmenizi öneririm. unsafeKonuyla ilgilenir olmaz , anahtar kelimeyi ve işaretçilerin nasıl kullanılacağını öğrenmeye başlayın ve C # ile marshaling yapın. Python'da olduğu gibi çalışacak çok büyük bir kütüphaneniz olacak, ancak C'de yapabileceğiniz birçok şeyi yapabileceksiniz. Ardından sistem API'sini elle çağırmaya ( InternetOpen gibi ) geçiş yapın ve öğrenin Bunları işe almak için nasıl. Hala çok fazla esnekliğe sahip olacaksın, ancak daha düşük seviyeli konseptlere harika bir giriş yapacaksın. Bunları yaptıktan sonra C öğrenmeye başlayın - o zaman onu bir parça kek olarak görürsünüz ve yüksek ve düşük seviyeli dillerin avantajlarını ve dezavantajlarını göreceksiniz (C? anladın mı?) ve İhtiyaçlarınıza uygun olanı bulmak için.

Bununla birlikte, C'deki A Crash Course'un denize C atlamak için başlangıç ​​noktası olarak yararlı olabileceğini düşünüyorum .


8

C'yi öğrenirken çekirdek kodunu okumayın. Son her performans parçasını sıkmak için püf noktaları vardır. Bazıları çok standart değil. Seni deli edecek.

Bunun yerine, birkaç ufacık, yüksek kod kaliteli projeye göz atın:

  • Lua - Dilleri programlama ile ilgilenmiyorsanız, bunu atlamak isteyebilirsiniz. Aksi takdirde, ne kadar az başardıklarını görmek gerçekten güzel bir koddur ve şaşırtıcıdır (Python'dan geldiğiniz için hayal kırıklığına uğradığınız görünmektedir).
  • ZeroMQ - Bu projeyi seviyorum. Hafif, süper hızlı bir mesaj sırası. Yine, yüksek kaliteli şeyler.
  • DarkHttpd - C'deki 2700 satırlık bir web sunucusu Soket programlama, ayrıştırma ve protokollerle çalışma gibi birkaç eğlenceli konuyu kapsar.

0

Yüksek seviyeli bir dilin bir amacı, karmaşık şeyleri gizlemektir. Eğer "daha düşük" bir dil öğrenmek istiyorsanız ve gerçekten karmaşık şeylerle başlamak istemiyorsanız (eskiden çoğunlukla sizden gizlenmişlerdi); bazı basit öğrenme projeleriyle başlamayı, bir sayı dizisini sıralamayı ya da bir karakter dizisini ters çevirmeyi ya da bazılarını ...

Küçük adımlar atarak dik bir yokuşta çıkmak daha kolaydır.


-3

Bakılması gereken harika projeler olduğu sürece: Unix çekirdekleri C. ile yazılmıştır.


Bağlantı eklemek mi istediniz?
jmort253

-3

Önce C dilbilgisini öğrenin ve ardından veri yapısını ve algoritmasını yazmak için kullanın. Tabii ki Linux çekirdeğini uzman c dili olarak okuyabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.