Forum: Compiler & IDEs Einfache Berechnung lässt sich nicht kompilieren


von J. T. (chaoskind)


Lesenswert?

MoinMoin,

ich glaube, die Betriebsblindheit hat mal wieder zugeschlagen. Mein 
Lieblingsfehler, das vergessene Semikolon, ist es diesmal nicht.

Mein Compiler(MinGW32GCC) wirft mir noch 3Fehler. In Zeile 55 und 
58:"error: expected expression before '/' token"

Und dann nochmal in Zeile 58:"error: stray '\344' in program".

Könnte da einer von euch mal kurz drüberschauen, und mir sagen, was ich 
da falsch mach?

Mit Dank im Voraus und freundlichen Grüßen,
Chaos

1
#include <windows.h>
2
#include <stdio.h>
3
#include <stdlib.h>
4
5
6
#define xMax 1366
7
#define yMax 768
8
9
void Mandelbrot (float CReaMin, float CReaMax, float CImaMin, float CImaMax, int nMax, int Tiefe3D);
10
11
12
int main()
13
{
14
15
16
17
    return 0;
18
}
19
20
21
void Mandelbrot (float CReaMin, float CReaMax, float CImaMin, float CImaMax, int nMax, int Tiefe3D)
22
{
23
    int xPos = 0;
24
    int yPos = 0;
25
    int xPosMerker = 0;
26
    int yPosMerker = 0;
27
28
    int n = 0;
29
30
    float DeltaCRea = (CReaMax - CReaMin) / xMax;
31
    float DeltaCIma = (CImaMax - CImaMin) / yMax;
32
33
    float CRea = CReaMin;
34
    float CIma = CImaMin;
35
    float ZRea = 0;
36
    float ZIma = 0;
37
38
    float BetragZ = 0;
39
40
    float CReaHalter = CRea;
41
    float CImaHalter = CIma;
42
    float ZReaHalter = 0;
43
    float ZImaHalter = 0;
44
45
46
    while (yPos < yMax)
47
    {
48
        while (xPos < xMax)
49
        {
50
            while (BetragZ < 4 && n < nMax)
51
            {
52
                ZReaHalter = ZRea;
53
                ZImaHalter = ZIma;
54
55
                ZRea = (ZReaHalter * ZReaHalter) - (ZImaHalter * ZImaHalter) - CRea; //Zeile55
56
                ZIma = (ZReaHalter * ZImaHalter) + (ZReaHalter * ZImaHalter) - CIma;
57
58
                BetragZ = (ZRea*ZRea) + (ZIma*ZIma);    //Zeile58
59
60
                n++;
61
            }
62
63
            if (n == nMax)
64
            {
65
                BetragZ = 0;
66
                n = 0;
67
            }
68
69
            if (BetragZ >= 4)
70
            {
71
                yPosMerker = yPos + Tiefe3D;
72
                if (yPosMerker > yMax) yPosMerker = yMax;
73
74
                while (yPosMerker > yPos)
75
                {
76
                    HDC hdc = GetDC(0);
77
                    SetPixel(hdc, xPos, yPos, RGB(0, 255, 255));
78
                    yPosMerker--;
79
                }
80
81
                BetragZ = 0;
82
                n = 0;
83
            }
84
85
            xPos++;
86
            CRea += DeltaCRea;
87
            ZRea = 0;
88
            ZIma = 0;
89
        }
90
91
        yPos++;
92
        xPos = 0;
93
        CIma += DeltaCIma;
94
        CRea = CReaHalter;
95
    }
96
97
    yPos = 0;
98
    CIma = CImaHalter;
99
}

von ghl (Gast)


Lesenswert?

Compiliert unter OS X/clang wenn man Zeile 1, 76 und 77 auskommentiert.

von ghl (Gast)


Lesenswert?

Weil ich grad lese "stray '\344'": Lösche alle UTF/nicht ASCII-Zeichen. 
Die entstehen wenn man z.B. einen Modifier hält und ein Leerzeichen 
tippt. Im Editor sieht das dann leider nach einem Leerzeichen aus. Das 
Gleiche wird dir in Zeile 55 passiert sein.

von Dirk B. (dirkb2)


Lesenswert?

Schalt mal deinen Editor in den Hex-Modus. Da können sich auch 
Sonderzeichen versteckt haben, die hier nicht zu sehen sind.

von J. T. (chaoskind)


Lesenswert?

Danke euch für Tipps.... Scheinbar kommt CodeBlocks mit den Kommentaren 
nicht richtig klar... Ich hatte in entsprechenden Zeilen welche, die ich 
hier nur durch Zeile 55 und 58 ersetzt hatte. Es waren eigentlich nur 
normale Zeichen in den Kommentaren....

Und Kommentare über mehrere Zeilen machen auch keine Probleme....

Nunja nun kompiliert er zumindest. Danke euch für die Hilfe =)

MfG Chaos

P.S. @ Dirk B

Kannst du mir zufällig sagen, wo ich in CodeBlocks in den Hexmode 
schalten kann? bzw ganz generell, was passiert im HexMode? Wird mir da 
jedes (ASCII)Zeichen in seiner Hexdarstellung gezeigt?

: Bearbeitet durch User
von Johann L. (gjlayde) Benutzerseite


Lesenswert?

In welcher Sprache soll das Programm sein?

// Kommentare gibt's nur in C++ und ab C99.

Sieht so aus als verwendest du C < C99 denn der Compiler interpretiert / 
als operator und erwartet links davon einen Wert.

: Bearbeitet durch User
von J. T. (chaoskind)


Lesenswert?

Das Programm soll in C sein. Ich war der Meinung, es gäbe irgendwo ein 
Häkchen zu setzen, das er nach C99 compiliert, habs aber nicht gefunden.

Ich wunder mich dann nur, wieso es klappt wenn ich

foo = bar; /*SNAFU*/ schreibe,

aber

foo = bar; //SNAFU

nicht geht.

Wenn es Kommentare erst ab C99 gibt, sollte er doch in beiden Fällen den 
/ als Operator interpretieren?

von g457 (Gast)


Lesenswert?

> Wenn es Kommentare erst ab C99 gibt [..]

Nein, Zeilenkommentare mit '//' gibts erst ab C99, Blockkommentare '/* 
*/' gibts auch davor.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Im Menü "Project/Build options" im Tab "Compiler settings" im Tab
"Compiler Flags" den dritten Eintrag "In C mode, spupport all ISO C90
programs. ..." nicht ankreuzen (Code::Blocks V13.12).

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

g457 schrieb:
> Nein, Zeilenkommentare mit '//' gibts erst ab C99,

Erstaunlich viele C-Compiler aus der vor-C99-Ära stören sich nicht an 
Zeilenkommentaren, auch wenn die damals noch nicht im Standard 
untergebracht waren.

Daß jetzt tatsächlich ein Compiler so ... analretentiv ist, 
Zeilenkommentare gezielt abzuweisen, das hätte ich nicht erwartet.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Rufus Τ. Firefly schrieb:
> Daß jetzt tatsächlich ein Compiler so ... analretentiv ist,
> Zeilenkommentare gezielt abzuweisen, das hätte ich nicht erwartet.

Ist halt die Frage, ob du den C-Compiler im strikten C89-Modus
betreibst (-std=c89) oder im Modus „mach mal C89, aber mit den
Erweriterungen, die GCC so im Laufe der Jahre eingebaut hat“
(-std=gnu89).

von J. T. (chaoskind)


Lesenswert?

Yalu X. schrieb:
> Im Menü "Project/Build options" im Tab "Compiler settings" im Tab
> "Compiler Flags" den dritten Eintrag "In C mode, spupport all ISO C90
> programs. ..." nicht ankreuzen (Code::Blocks V13.12).

OK! nun läufts auch mit Kommentaren über eine Zeile! Ich hatte den Haken 
nämlich gesetzt. Danke nochmal für die Hilfe =)

MfG Chaos

von Rolf M. (rmagnus)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Daß jetzt tatsächlich ein Compiler so ... analretentiv ist,
> Zeilenkommentare gezielt abzuweisen, das hätte ich nicht erwartet.

Wenn ich einem Compiler sage, daß er nur C89-Code akzeptieren darf, dann 
erwarte ich schon irgendwie, daß er das auch tut.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.