PDA

Tam Sürümünü Görmek İçin : C adına 2 soru...


asinanyavuz
11/07/2004, 16:36
İlk sorum:
C Tüm Sürümleri için Herbert Schidlt, Alfa Yayınları nın kitabını aldım. Onunla çalışmaya uğraşıyorum. Ama ilk aşamalarda (Bölüm 2 : Deyimler) de örneklerde açıklanmamış daha doğrusu anlamadığı yerler var(yanlarına yazdım):

#include <stdio.h>

int main(void) /* bu satır ne işe yarıyor */
{
int x;

x = 10;

if(x == 10) {
int x;

x = 99;
printf("Inner x: %d\n", x);
}

printf("Outer x: %d\n", x);

return 0;
}

içteki x in dıştaki x i gizlemesi ne anlama geliyor. Yani iç alanda iç alanda tanımlanan x kullanılıyor yanlış anlamadıysam.

#include <stdio.h>

void f(void); /* bu void nedir? */

int main(void)
{
int i;

for(i=0; i<10; i++) f();

return 0;
}

void f(void)
{
int j = 10;

printf("%d ", j);

j++; /* this line has no lasting effect */
}
Bu kodu tamamen açıklarsanız ve çıktısını da yazarsanız memnun olurum açıklayarak.

ikinci sorum ise :
c99 standardına göre derleme yapan bir derleyici nasıl bulabilirim? ( ücretsiz olarak )


aokocax
11/07/2004, 17:23
s) int main(void) /* bu satır ne işe yarıyor */
c) Main fonksiyonu programında ilk olarak çalıştırlacak fonksiyondur, olması zorunludur.

s)içteki x in dıştaki x i gizlemesi ne anlama geliyor. Yani iç alanda iç alanda tanımlanan x kullanılıyor yanlış anlamadıysam.
c) Aslında programcılıkta çok önerilen bir değişken tanımlama sistemi olmasada burda anlatılmak istenen şu

int x;

x = 10;

if(x == 10) {
int x; //burda yeni bir x değişkeni tanımlanıyor eğer bu "x" if bloğunun içinde olmasaydı hata alırdın

x = 99;// burda bir üst satırda tanımlanan "x" e değer atanıyor önemli olanda burası , if bloğundan önceki x korunuyor if bloğunun içindeki "x" etkileniyor
printf("Inner x: %d\n", x); //burda x=99
}

printf("Outer x: %d\n", x);//burda x=10 çünkü if bloğu sonra erdi 2 kez tanımlanan x değerine burdan erişemezsin

return 0;

s)void f(void); /* bu void nedir? */
c) void =boş yani f fonksiyonun geri dönüş değeri yok, void fonksiyonlar atama işlemlerinde kullanılamazlar ve return kullanamazlar örn;
int f(void)
{
int a=10;
return a;
}
gibi bir fonksiyonumuz olsun bunu main fonksiyonumuzdan şu şekilde çağırabiliriz.

int b;
b=f(); // burda b=10 olur...
eğer f fonksiyonu geri dönüş değeri void olsaydı...
void f(void)
{
int a=10;
return a; //derleyici hata verirdi çünkü fonksiyon geridönüş dğeri çıkaramaz die tanımlanmış
}

ikinci void ise fonksiyonun parametre almadığını gösteriyor...
eğer parametre alsaydı şu şekilde olurdu

int b; // burda b yi public (heryerden erişebilir) olarak düşün
void f(int a)
{
b=a;
}
f fonkisyonunu herhangi bir yerden çağırdığında içinde değer geçmek zorundasın
örneğin
f(20); // burda fonksiyon int b değerine 20 sayısı atar
eğer senin örneğindeki gibi void ise fonksiyona değer geçemessin yani
f(20);// hata alırsın....

s)Bu kodu tamamen açıklarsanız ve çıktısını da yazarsanız memnun olurum açıklayarak.

#include <stdio.h>

void f(void); /* bu void nedir? */

int main(void)
{
int i;

for(i=0; i<10; i++) f(); // i değerini 10'a kadar arttır ve her arttışta f fonksiyonunu çalıştır

return 0;
}

void f(void)
{
int j = 10;

printf("%d ", j); /ekrana j yani 10 değerini yaz

j++; /* this line has no lasting effect */ //burda değer arttırımına gidilmiş ama fonksiyon her seferinde yeniden çalışacağından(for döngüsünden ötürü 10 kez) "j" yeniden 10 olacak ,yani j++; işlemi bir işe yaramayacak.
}

anlaşılacağı üzere bu program çalıştırıldığında ekrana on kere 10 yazdırır yani
10 10 10 10 ...
derleyicinde ufak bir warning mesajı gösterir j++; 'dan dolayı

s)c99 standardına göre derleme yapan bir derleyici nasıl bulabilirim? ( ücretsiz olarak )
c) şimdi link veremeyeceğim ama forumda araştrma yaparsan bir çok derleyicinin download adresini bulursun...

asinanyavuz
11/07/2004, 17:26
çok teşekkür ederim...

asinanyavuz
11/07/2004, 17:42
fakat aramalarım sonucu maalesef bulamadım. Sadece adını öğrensem yeter. C++ derleyici sanırım işimi görmez çünkü C++ C89 üstüne yazılmış.

psikopat®
11/07/2004, 17:45
c99 ne ki? niye C++ derleyicileri olmuyo?

asinanyavuz
11/07/2004, 17:54
c99 yeni geliştirilmiş bir C standartı. Çünkü c89 üstüne yapılmış c++ dili. c99 da ekstra fonksiyonlar fln var...

psikopat®
11/07/2004, 18:46
iyi de çok fazla fark yoktur ki bunların arasında. bence Dev-C++ oldukça iyi. denemeni tavsiye ederim.

http://www.bloodshed.net/devcpp.html

bu sayfadan indirebilirsin....

asinanyavuz
11/07/2004, 18:48
zaten dev-cpp kullanıyorum. Fakat beni eğiten kitap özellikle c99 üzerindede duruyor bende durmak istiyorum açıkçası. Ama bir türlü bulamıyorum. Sanırım borlandın derleyicisinde varmış ama indiremem dial-up :(

psikopat®
11/07/2004, 19:12
peki kitabın yazarı hangi compiler'ı kullanabileceğinle ilgili birşeyler yazmamış mı?

asinanyavuz
11/07/2004, 19:19
hayır maalesef... kitapta derleyici adı geçmiyor hiç. Sadece bir yerde dosyaları bağlamak için Visual C++ da hangi komutların işe yarayacağı yazıyor...

psikopat®
11/07/2004, 19:22
o zaman Visual C++'ın son versiyonunu bulmaya çalış. demekki C++ da C99 olabiliryormuş. öyle değil mi?

asinanyavuz
11/07/2004, 19:25
c++ C99 olamaz. Dediğim gibi C++ C89 üzerinden geliştirilmiş. Ama C++ derleyicisi C99 Destekliyor olabilir. Sanırım bulduğum sonuçlara göre borland da destekliyor ama dial-up :(

psikopat®
11/07/2004, 19:30
belki başka C++ derleyicileri de destekliyodur. Dev-C++ desteklemiyor mu?

DotNetKid
11/07/2004, 19:42
visual c++ nın son sürümü c++.net :) kardeş sen en iyisi vs.net 2003 edin bir tane ama tabii elindeki kitapla olmaz. olur da.. sen en iyisi visual c++ editörü edin bir tane o sana yeter. mesela visual studio bulman sanırım daha kolay olur, sadece visual c++ bulmandan..

asinanyavuz
11/07/2004, 19:42
şu ana kadar problem çıkarmadı. Ama çok karakteristik bir fonksiyon kullanacak kadar C bilmediğim için bilmiyorum. Ama vakti gelince iyice araştırırım. Ayrıca C99 daki bir çok fonksiyonu zaten C++ kullanıcıları biliyormuş :)

asinanyavuz
11/07/2004, 19:43
Bir de : "Because the timing of the release of C99, this version of Visual C++ is not conformant with that standard. " Yani Visual C++ desteklemiyor. VC++ 2005 Express destekler kanaatindeyim

psikopat®
11/07/2004, 19:52
desteklemiyo dediğin de iki tane komutu desteklemiyodur. fazla bir farkı yoktur....

asinanyavuz
11/07/2004, 21:58
inşallah öyledir...

psikopat®
11/07/2004, 22:00
http://gcc.gnu.org/c99status.html

şu adrese bi bak istersen. GCC'nin şu anki durumunu gösteriyo. adamlar çoğunu halletmişler....

acehreli
12/07/2004, 01:40
asinanyavuz, digerlerinin de soyledikleri gibi, bu ise fazla kafani takma :)

Evet, C++ C89 uzerine kurulmustur ama cogu C++ derleyicisi C99 olanaklarini de ek olarak sunar. Borland, Visual Studio, Dev C++, vs. hepsi cok iyidir...

mcman
14/07/2004, 22:40
borland c++ builder olabilir. herbert amcamizin kitabi ve ilk c bolumunde bununla derletiyor programi :) dene .

asinanyavuz
15/07/2004, 20:23
dediğim gibi borland c++ builder ı indiremem dial-up :(