{"id":1277,"date":"2012-04-04T10:43:12","date_gmt":"2012-04-04T09:43:12","guid":{"rendered":"http:\/\/roboblog.fatal-fury.de\/?p=1277"},"modified":"2012-04-04T11:31:02","modified_gmt":"2012-04-04T10:31:02","slug":"scheis-fortran","status":"publish","type":"post","link":"http:\/\/roboblog.fatal-fury.de\/?p=1277","title":{"rendered":"Schei\u00df Fortran"},"content":{"rendered":"<p>Ich hasse es, wirklich.<br \/>\nWelche Ausgabe erwartet ihr bei diesem Programm?<\/p>\n<pre><code>\r\nsubroutine func()\r\n  implicit none\r\n  real :: time = 0;\r\n  time = time + 1\r\n  write(*,*) time\r\nend subroutine\r\n\r\nprogram test\r\n  implicit none\r\n  integer :: i\r\n  do i = 1, 10\r\n    call func()\r\n  end do\r\nend\r\n<\/code><\/pre>\n<p>Zehn mal die Ausgabe von \"1\"?<br \/>\nNein, falsch!<\/p>\n<pre>\r\nthomas@cluster:~$ .\/a.out \r\n   1.000000    \r\n   2.000000    \r\n   3.000000    \r\n   4.000000    \r\n   5.000000    \r\n   6.000000    \r\n   7.000000    \r\n   8.000000    \r\n   9.000000    \r\n   10.00000 \r\n<\/pre>\n<p>Dann ist time also keine lokale Variable die bei jedem Aufruf von func() auf dem Stack gelegt wird? Und schon garnicht wird sie mit 0 initialisiert. Ist sie static und existiert die ganze Zeit \u00fcber? Dann aber nicht auf dem Stack. Das nervt...<\/p>\n<p>\/\/ edit<br \/>\nDie Variable wird statisch, sobald man sie bei der deklaration auch initialisiert.<br \/>\n<a href=\"http:\/\/www.math.uni-leipzig.de\/~hellmund\/Vorlesung\/scr4.pdf\">http:\/\/www.math.uni-leipzig.de\/~hellmund\/Vorlesung\/scr4.pdf<\/a> Seite 25 und 26<\/p>\n<blockquote><p>Durch die Initialisierung wird die entsprechende Variable statisch! Die Initialisierung wird nur einmal, beim Programmstart, durchgef\u00fchrt.<br \/>\n...<br \/>\nVariablen sind statisch, wenn sie<br \/>\na) das save-Attribut tragen<br \/>\ninteger, save :: j<br \/>\nb) bei der De?nition initialisiert werden (s. oben) oder<br \/>\nc) nach der De?nition mit einer data-Anweisung initialisiert werden.\n<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Ich hasse es, wirklich. Welche Ausgabe erwartet ihr bei diesem Programm? subroutine func() implicit none real :: time = 0; time = time + 1 write(*,*) time end subroutine program test implicit none integer :: i do i = 1, 10 call func() end do end Zehn mal die Ausgabe von \"1\"? Nein, falsch! thomas@cluster:~$ [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[30],"class_list":["post-1277","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-fortran"],"_links":{"self":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/1277","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1277"}],"version-history":[{"count":5,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/1277\/revisions"}],"predecessor-version":[{"id":1281,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/1277\/revisions\/1281"}],"wp:attachment":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1277"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1277"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1277"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}