Funksiyaların çağırılması, funksiyalara parametr ötürülməsi və funksyanın qiymət qaytarması Calling Convention Çağrılma Razılaşması adlandırılan qaydalardan istifadə edir. Misal üçün funksiyanın qaytardığı qiymət yaddaş, stek, yoxsa reqistrlərdə saxlanılmalıdır. Hal-hazırda bir çox kompilyatorlar C Calling Convention - CDECL - C declaration -dan istifadə edir . CDECL -a əsasən kiçik ölçlü nəticələr %eax reqistri vastəsilə qaytarılır. kvadrat funksiyasının tipi int olduğundan onun da nəticəsi %eax reqistrinə yerləşdirilir. Əgər siz funksiyanın daxilində return operatoru ilə hansısa nəticə qaytarsanız, misal üçün return 34; onda həmin nəticə ekranda çap olunar. Amma siz return operatorundan istifadə etmədiyinizə görə funksiya qayıdan zaman nəticə olaraq %eax reqistrinə olan məlumat götürülür. Prosessorun reqistrlərinin qiyməti isə proramın icrası zamanı daima dəyişir və konkret hansı qiymət alacağın demək olmaz. Bu 10-da ola bilər , istənilən başqa qiymət də.
Bu barədə dafa ətraflı məlumat almaq üçün assmbler dilini örgənmək lazımdır. link
Cox sağolun amma mənə yenədə sirli qaldıki niyə coutla çağıranda o 10 çap olunur nəysə yəqin onunda bir səbəbi var birdən sizdən xahiş edirəm əgər imkan varsa ilkaddimlara mouse hereketleri ekran olculerine aid ders hazırlayardızda
Sizin tərtib etdiyiniz
kvadrat()funksiyası icra olunan zaman ekranda tələb olunan ölçüdə kvadrat çəkir. Siz həmin funksiyanı düzgün şəkildə çağırmalısınız. Funksiyanı çağırmaq üçün onun adını yazıb, funksiyaya ötürülməli parametrləri mötərizə daxilində göstərmək lazımdır. Misal üçün yuxarıda tərtib etdiyiniz koda əsasən [code]kvadrat(5);[/code] yazsaq ekranda uzunluğu 5, [code]kvadrat(10);[/code] yazsaq uzunluğu 10 olan kvadrat çəkilər. Bununlada iş bitir. kvadrat() funksiyasını çağırmaq üçün cout -dan istifadə eləmək lazım deyil. Misal üçün siz kvadrat funksiyasına aşağıdakı kimi müraciət edirsiniz [code]std::cout<
Yox mən düzəldə billmirəm zəhmət olmasa kodu yazardızda
Salam sizin kodda yanlışlıq var, çünki siz kvadrat funksiyasın int tipli elan edirsiniz, lakin funksiya daxilində heç bir return operatorundan istifadə etmirsiniz. Belə halda kompiyator sizə kompilyasiya səhvi göstərməlidir. İstənilən halda kompilyasiya etsəniz belə proqramın icrası zamanı sonda 10, 20 və ya istənilən digər bir ədədin çap olunması normaldır. Səbəb sizin ən son yazdığınız koddadır:
[code]std::cout<
Onda yazdığım sətrin başlanğıcına oxşar sətirləri bir-bir silərək yoxlayın. Ancaq o sətirlə ekrana məlumat çap edir
Hansi hesablamanin? Butun hallarda 10 yazilir ne daxiletsem 10 yazilir
10 hesablamanın nəticəsidi. və bu stəri silərək nəticəni ekana yazdırmaya bilərsiz.
Ancaq bu sətir silinsə hesabın nəticəsi bilinməyəcək. Çünki kvadrat
funksiyasının nəticəsi birbaşa ekrana çap edilir. Əgər hesabın nəticəsi lazımdırsa bu nəticəni hansısa
dəyişəndə saxlayın
[code]std::cout<