<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Änderungen von Variablen in Variable speichern]]></title><description><![CDATA[<p>Hallo zusammen ich bastel grad mit MFC an einigen (vielen) Editfeldern rum..</p>
<p>Wolllte wissen wie ich am besten speichere ob und was sich in den Feldern geändert hat.<br />
hatte daran gedacht alles in nem short int zu speichern mit</p>
<pre><code class="language-cpp">#define FELD1 (1&lt;&lt;0)
#define FELD2 (1&lt;&lt;1)
...

//vergleichen und speichern mit
short int wAenderungen;
if(Feld1.GetText() != davor.Feld1)
  wAenderungn = FELD1;
if(Feld2.GetText() != davor.Feld2)
  wAenderungn = FELD2;
...

// dann abrufen mit
if(wAenderungen != 0)
{
  if(wAnderungen &amp; FELD1)
    //1.Feld geändert
  if(wAnderungen &amp; FELD2)
    //2.Feld geändert
}
</code></pre>
<p>Da ich mich ja weiterbilden will <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> wollt ich wissen ob es da noch etwas eleganteres gibt.</p>
<p>Gruß Has3</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/176451/änderungen-von-variablen-in-variable-speichern</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 14:11:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/176451.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 21 Mar 2007 12:16:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Wed, 21 Mar 2007 12:16:12 GMT]]></title><description><![CDATA[<p>Hallo zusammen ich bastel grad mit MFC an einigen (vielen) Editfeldern rum..</p>
<p>Wolllte wissen wie ich am besten speichere ob und was sich in den Feldern geändert hat.<br />
hatte daran gedacht alles in nem short int zu speichern mit</p>
<pre><code class="language-cpp">#define FELD1 (1&lt;&lt;0)
#define FELD2 (1&lt;&lt;1)
...

//vergleichen und speichern mit
short int wAenderungen;
if(Feld1.GetText() != davor.Feld1)
  wAenderungn = FELD1;
if(Feld2.GetText() != davor.Feld2)
  wAenderungn = FELD2;
...

// dann abrufen mit
if(wAenderungen != 0)
{
  if(wAnderungen &amp; FELD1)
    //1.Feld geändert
  if(wAnderungen &amp; FELD2)
    //2.Feld geändert
}
</code></pre>
<p>Da ich mich ja weiterbilden will <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> wollt ich wissen ob es da noch etwas eleganteres gibt.</p>
<p>Gruß Has3</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249736</guid><dc:creator><![CDATA[Has3]]></dc:creator><pubDate>Wed, 21 Mar 2007 12:16:12 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Wed, 21 Mar 2007 13:08:46 GMT]]></title><description><![CDATA[<p>Has3 schrieb:</p>
<blockquote>
<p>...<br />
hatte daran gedacht alles in nem short int zu speichern mit<br />
...</p>
</blockquote>
<p>Vergiß das lieber.... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Erzeugt viel Aufwand und Fehlerrisiken und bringt kaum was. (was machst Du, wenn Du eine Variable mehr hast, als Bits in einem short ? Oder die Variablen ihre Reihenfoge verändern ? Wieviele Bits hat ein short auf der jeweiligen Compilerversion/PLattform/... ? ....)</p>
<p>Du kannst einfach jeder Variable ein &quot;bool&quot; spendieren, in dem Du Dir das merkst ....<br />
Und selbst das ist vermutlich überflüssig: Wofür brauchst Du denn überhaupt die Information, welche Daten sich geändert haben ?<br />
Reicht da nicht ein vorher-nacher-Vergleich ?<br />
Wenn es Dir nur darum geht, den Fall, dass sich gar nichts geändert hat, &quot;wegzuoptimieren&quot;, solltest Du Deinem Dialog einfach einen &quot;Cancel&quot;-Button spendieren und fertig.</p>
<p>Ach ja: so ein #define ist ziemlich &quot;unschön&quot; ....</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249762</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 21 Mar 2007 13:08:46 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Wed, 21 Mar 2007 13:33:45 GMT]]></title><description><![CDATA[<p>Has3 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">//vergleichen und speichern mit
short int wAenderungen;
if(Feld1.GetText() != davor.Feld1)
  wAenderungn = FELD1;
if(Feld2.GetText() != davor.Feld2)
  wAenderungn = FELD2;
...
</code></pre>
</blockquote>
<p>brauchst nicht die strings zu prüfen. edit-controls haben ein 'modified' flag.<br />
--&gt; CEdit::GetModify()</p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Ach ja: so ein #define ist ziemlich &quot;unschön&quot; ....</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249789</guid><dc:creator><![CDATA[vista]]></dc:creator><pubDate>Wed, 21 Mar 2007 13:33:45 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Wed, 21 Mar 2007 13:39:56 GMT]]></title><description><![CDATA[<p>vista schrieb:</p>
<blockquote>
<p>...</p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Ach ja: so ein #define ist ziemlich &quot;unschön&quot; ....</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>zu Recht confused ... war ich nämlich auch. Ich habe im Ausdruck <code>1&lt;&lt;0</code> das erste Zeichen als &quot;kleines L&quot; gelesen .... und nicht verstanden.</p>
<p>Zwar stehe ich für Bitmuster immer noch die Hexdarstellung vor, aber trotzdem ziehe ich meinen Einwand zurück: &quot;Unschön&quot; ist das nicht.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249793</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 21 Mar 2007 13:39:56 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Wed, 21 Mar 2007 14:14:30 GMT]]></title><description><![CDATA[<p>wollte sehen ob man was in den Feldern abgeändert hat und wenn dann die Änderung in ner yesnochancel Messagebox anzeigen.</p>
<p>Is egentlich praktischer wenn ich erst ne Abfrage starte OB sich was geändert hat , falls dann die Messagebox anzuzeigen und auf den Inhalt einzugehen.</p>
<p>vista schrieb:</p>
<blockquote>
<p>brauchst nicht die strings zu prüfen. edit-controls haben ein 'modified' flag.<br />
--&gt; CEdit::GetModify()</p>
</blockquote>
<p>nice to know : )</p>
<p>btw nich dass jmd das hier anschaut und falsch macht<br />
es heißt <strong>|=</strong></p>
<pre><code class="language-cpp">short int wAenderungen = 0;
if(Feld1.GetModify())
  wAenderungn |= FELD1;
if(Feld2.GetModify())
  wAenderungn |= FELD2;
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1249830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249830</guid><dc:creator><![CDATA[Has3]]></dc:creator><pubDate>Wed, 21 Mar 2007 14:14:30 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Wed, 21 Mar 2007 20:14:41 GMT]]></title><description><![CDATA[<p>Has3 schrieb:</p>
<blockquote>
<p>Da ich mich ja weiterbilden will <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> wollt ich wissen ob es da noch etwas eleganteres gibt.</p>
</blockquote>
<p>Ja, man kann da ein kleines Template bauen, welches jede Änderung registriert - etwa sowas</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

template&lt; typename T &gt;
class Value
{
public:
    Value( const T&amp; x )
        : m_x( x )
        , m_changed( false )
    {}

    Value&amp; operator=( const T&amp; x )
    {
        if( x != m_x )
        {
            m_x = x;
            m_changed = true;
        }
        return *this;

    }
    bool hasChanged() const { return m_changed; }
    T get() const { return m_x; }
    void reset() { m_changed = false; }

private:
    T m_x;
    bool m_changed;

};

int main()
{
    using namespace std;
    Value&lt; string &gt; feld1 = &quot;Hallo&quot;;
    feld1 = &quot;Hallo&quot;;
    if( !feld1.hasChanged() )
        cout &lt;&lt; &quot;keine Änderung &quot; &lt;&lt; endl;
    feld1 = &quot;Welt&quot;;
    if( feld1.hasChanged() )
        cout &lt;&lt; &quot;jetzt hat sich der Wert verändert &quot; &lt;&lt; endl;
    return 0;
}
</code></pre>
<p>Wenn notwendig, lässt sich Value&lt;&gt; natürlich aus so erweitern, dass sich der letzte Wert gemerkt wird. Der Zugriff auf den eigentlichen Wert geht mit get() (s.o.).</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250070</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250070</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 21 Mar 2007 20:14:41 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Wed, 21 Mar 2007 21:45:27 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>trotzdem ziehe ich meinen Einwand zurück: &quot;Unschön&quot; ist das nicht.</p>
</blockquote>
<p>Wieso so zimperlich? '#define' für Konstanten ist grundsätzlich unschön.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250139</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Wed, 21 Mar 2007 21:45:27 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Thu, 22 Mar 2007 08:44:23 GMT]]></title><description><![CDATA[<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>trotzdem ziehe ich meinen Einwand zurück: &quot;Unschön&quot; ist das nicht.</p>
</blockquote>
<p>Wieso so zimperlich? '#define' für Konstanten ist grundsätzlich unschön.</p>
</blockquote>
<p>Weil ich meine Abneigung (die ich immer noch verspüre) in diesem Fall nicht konkret begründen kann. Ich hätte es anders gemacht ... aber nicht von Kollegen verlangt, es anders zu machen. Ursprünglich hatte ich diesen konkreten Fall für riskant empfunden ... jetzt bleibt nur die allgemeine Abneigung gegen #defines.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250245</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 22 Mar 2007 08:44:23 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Thu, 22 Mar 2007 09:09:12 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>Has3 schrieb:</p>
<blockquote>
<p>Da ich mich ja weiterbilden will <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> wollt ich wissen ob es da noch etwas eleganteres gibt.</p>
</blockquote>
<p>Ja, man kann da ein kleines Template bauen, welches jede Änderung registriert - etwa sowas...</p>
</blockquote>
<p>wie schon erwähnt: edit-controls kann man fragen, ob sich was verändert hat.<br />
so elegant ein template sein mag (templates zu nutzen ist ja irgendwie immer elegant <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> ), aber funktionalität nachzubauen, die schon existiert, ist niemals elegant.</p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>trotzdem ziehe ich meinen Einwand zurück: &quot;Unschön&quot; ist das nicht.</p>
</blockquote>
<p>Wieso so zimperlich? '#define' für Konstanten ist grundsätzlich unschön.</p>
</blockquote>
<p>Weil ich meine Abneigung (die ich immer noch verspüre) in diesem Fall nicht konkret begründen kann.</p>
</blockquote>
<p>kann es denn der Konrad begründen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250266</guid><dc:creator><![CDATA[vista]]></dc:creator><pubDate>Thu, 22 Mar 2007 09:09:12 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Thu, 22 Mar 2007 09:57:48 GMT]]></title><description><![CDATA[<p>vista schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>trotzdem ziehe ich meinen Einwand zurück: &quot;Unschön&quot; ist das nicht.</p>
</blockquote>
<p>Wieso so zimperlich? '#define' für Konstanten ist grundsätzlich unschön.</p>
</blockquote>
<p>Weil ich meine Abneigung (die ich immer noch verspüre) in diesem Fall nicht konkret begründen kann.</p>
</blockquote>
<p>kann es denn der Konrad begründen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Ich denke, das kann er. Es gibt in C++ (im Gegensatz zu C) ein Sprachelement, welches das Definieren von Konstanten erlaubt. Damit gibt es keinen Grund mehr, auf den Präprozessor auszuweichen, welcher mehrere Nachteile hat:</p>
<p>- (a priori) keine Typensicherheit,<br />
- zerstört die Logik des Programms und erschwert das Debuggen,<br />
- stellt prinzipiell keinen konstanten Wert dar (s. Beispiel 1),<br />
- ist fehleranfällig (z.B. durch vergessene Klammern, Beispiel 2),<br />
- last, but not least: Zerstört Namensbereich-Zuordnungen und ist somit destruktiv.</p>
<pre><code class="language-cpp">// So macht man es in C++:

namespace math {
    const double pi = std::atan(1.0) * 4.0;
}

// So macht man es nicht.

// Beispiel 1, wird jedes Mail neu berechnet, wenn der Code benutzt wird:

#define pi (std::atan(1.0) * 4.0)

cout &lt;&lt; pi &lt;&lt; endl; // Wert wird berechnet
cout &lt;&lt; pi &lt;&lt; endl; // Wert wird erneut berechnet.

// Beispiel 2, hier ham' wir den Salat.

#define drei 2 + 1

cout &lt;&lt; drei * 4 &lt;&lt; endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1250314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250314</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Thu, 22 Mar 2007 09:57:48 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Thu, 22 Mar 2007 10:09:07 GMT]]></title><description><![CDATA[<p>Konrad Rudolph schrieb:</p>
<blockquote>
<pre><code class="language-cpp">#define pi (std::atan(1.0) * 4.0)
#define drei 2 + 1
</code></pre>
</blockquote>
<p>du hast es absichtlich falsch gemacht. damit kannst du niemanden überzeugen.</p>
<pre><code class="language-cpp">#define pi 3.1415926536
#define drei (2 + 1)
</code></pre>
<p>nun sind die fehler weg.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250326</guid><dc:creator><![CDATA[vista]]></dc:creator><pubDate>Thu, 22 Mar 2007 10:09:07 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Thu, 22 Mar 2007 10:18:28 GMT]]></title><description><![CDATA[<p>gut zu wissen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
werd mir mal das template anschaun wenn ich zeit hab.</p>
<p>vielen Dank für die Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250332</guid><dc:creator><![CDATA[Has3]]></dc:creator><pubDate>Thu, 22 Mar 2007 10:18:28 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Thu, 22 Mar 2007 10:22:50 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">// irgendwo in den Weiten der Headers der vielen Libraries...

// x1.h
void drei();
enum { pi };
</code></pre>
<pre><code class="language-cpp">// eigene header
// A1.h
#define pi 3.1415926536
#define drei (2 + 1)
</code></pre>
<pre><code class="language-cpp">#include &lt;eine_header_die_irgend_eine_header_X1_includiert.h&gt;
#include &quot;A1.h&quot;

void foo()
{
     int i = drei * pi;
}
</code></pre>
<p>Viel Spass bei der Fehlersuche!!!!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250334</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Thu, 22 Mar 2007 10:22:50 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Thu, 22 Mar 2007 10:21:39 GMT]]></title><description><![CDATA[<p>vista schrieb:</p>
<blockquote>
<p>du hast es absichtlich falsch gemacht. damit kannst du niemanden überzeugen.</p>
</blockquote>
<p>Bei der Verwendung von PI ist mir eine exakt berechnete Version auf jeden Fall lieber als ein fest vorgegebener Wert (klar, für die meisten Anwendungen reicht sogar 3.14, aber sag das mal einem Puristen :D). Und ansonsten zeigen die Beispiele recht deutlich die Probleme des Präprozessors - #define ist eine dumpfe Textersetzung und wenn dabei Fehler auftreten, kannst du die nur schwer lokalisieren.<br />
In C war #define womöglich noch verwendbar, aber in C++ ist es in den meisten Fällen unnötig (da gibt es Möglichkeiten mit vergleichbarer Anwendbarkeit, aber ohne die Schwächen des Präprozessors).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250335</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 22 Mar 2007 10:21:39 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Thu, 22 Mar 2007 10:21:46 GMT]]></title><description><![CDATA[<p>vista schrieb:</p>
<blockquote>
<p>Konrad Rudolph schrieb:</p>
<blockquote>
<pre><code class="language-cpp">#define pi (std::atan(1.0) * 4.0)
#define drei 2 + 1
</code></pre>
</blockquote>
<p>du hast es absichtlich falsch gemacht.</p>
</blockquote>
<p>Natürlich. Ich sagte ja auch, es sei fehleranfällig. Was glaubst Du, wie häufig diese Klammern vergessen werden!</p>
<blockquote>
<p>damit kannst du niemanden überzeugen.</p>
</blockquote>
<p>Jedem das seine. Aber in großen Teamprojekten ist man über jede eliminierte potentielle Fehlerquelle froh.</p>
<p>Natürlich kann man auch mit #defines's fehlerfreien Code schreiben, das habe ich nicht bestritten. Aber es ist definitiv schwerer, als wenn man es sein lässt.</p>
<blockquote>
<pre><code class="language-cpp">#define pi 3.1415926536
</code></pre>
</blockquote>
<p>Ich bevorzuge die Definition über den Arkustangens.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250336</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Thu, 22 Mar 2007 10:21:46 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Thu, 22 Mar 2007 10:52:44 GMT]]></title><description><![CDATA[<p>ok, dass #define grundsätzlich fehlerträchtiger ist als etwas anderes kann ich nicht nachvollziehen, denn meistens handelt man sich fehlerquellen durch falsche anwendung ein und das kann auch mit anderen konstrukten passieren.<br />
..und dass #define immer eine stumpfe textersetzung macht ist auch nicht ganz richtig. etwas rechnen kann es ja auch.<br />
aber da ich von C++ null plan habe (ich programmiere meistens C), schenke ich euch mein blindes vertrauen und glaube euch, dass es in C++ andere möglichkeiten gibt, die besser ins konzept der sprache passen und die man als C++ progger deshalb #define vorziehen sollte.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250370</guid><dc:creator><![CDATA[vista]]></dc:creator><pubDate>Thu, 22 Mar 2007 10:52:44 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Thu, 22 Mar 2007 10:58:21 GMT]]></title><description><![CDATA[<p>vista schrieb:</p>
<blockquote>
<p>..und dass #define immer eine stumpfe textersetzung macht ist auch nicht ganz richtig. etwas rechnen kann es ja auch.</p>
</blockquote>
<p>Echt? Das beste, was der Präprozessor &quot;rechnen&quot; kann, sind die Operatoren # und ##. Bei einem <code>#define drei (1+2)</code> wird jedes Vorkommen von 'drei' textuell ersetzt, ohne daß der Präprozessor sind den Inhalt der Ersetzung ansieht - der Rest ist dann Sache des Compilers (der die Berechnung von (1+2) rausoptimieren kann).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250376</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 22 Mar 2007 10:58:21 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Thu, 22 Mar 2007 11:03:13 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>vista schrieb:</p>
<blockquote>
<p>..und dass #define immer eine stumpfe textersetzung macht ist auch nicht ganz richtig. etwas rechnen kann es ja auch.</p>
</blockquote>
<p>Echt? Das beste, was der Präprozessor &quot;rechnen&quot; kann, sind die Operatoren # und ##. Bei einem <code>#define drei (1+2)</code> wird jedes Vorkommen von 'drei' textuell ersetzt, ohne daß der Präprozessor sind den Inhalt der Ersetzung ansieht - der Rest ist dann Sache des Compilers (der die Berechnung von (1+2) rausoptimieren kann).</p>
</blockquote>
<p>ich kann mich jetzt täuschen, aber als ich mir mal c-code nach dem preprocessor-durchlauf angeschaut habe (war' s jetzt beim codewarrior?)<br />
da wurde so etwas:</p>
<pre><code>#define drei (1+2)
...
int x = drei;
</code></pre>
<p>das:</p>
<pre><code>int x = 3;
</code></pre>
<p>mag aber sein, das in der regel die präprozessoren nicht so schlau sind...<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250385</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250385</guid><dc:creator><![CDATA[vista]]></dc:creator><pubDate>Thu, 22 Mar 2007 11:03:13 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Thu, 22 Mar 2007 11:36:51 GMT]]></title><description><![CDATA[<p>Der Compiler macht eine 3 draus, wenn er das sieht. Aber nicht der Präprozessor. Und ja, du hast von C++ keinen Plan, sonst würdest du das nicht so in deinem jugendlichen Leichtsinn sagen, das Makros nicht so übel sind. Denn du mußt dir einem bewusst werden:</p>
<pre><code class="language-cpp">static const int hallo = 2;
</code></pre>
<p>Das Ding verbraucht KEINEN Speicher. (außer der Compiler ist so dämlich, aber dann würde ich den nicht weiter benutzen) Ich habe also nicht nur wie Makros keinen Speicherverbrauch, sondern auch noch ein Sprach-Element in Gebraucht. Ich kann das Hallo sogar in einen Namespace legen. Das geht alles nicht mit Makros. Es gibt KEINEN Grund dafür, wenn man C++ programmiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250399</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Thu, 22 Mar 2007 11:36:51 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Thu, 22 Mar 2007 11:39:53 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<pre><code class="language-cpp">static const int hallo = 2;
</code></pre>
<p>Das Ding verbraucht KEINEN Speicher.</p>
</blockquote>
<p>demnach müsste ein 'sizeof(hallo)' 0 ergeben.<br />
ist es so?<br />
wäre jedenfalls unlogisch wenn nicht...<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250405</guid><dc:creator><![CDATA[vista]]></dc:creator><pubDate>Thu, 22 Mar 2007 11:39:53 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Thu, 22 Mar 2007 11:43:06 GMT]]></title><description><![CDATA[<p>Stimmt. *mir selbst in den arsch tritt*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250407</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Thu, 22 Mar 2007 11:43:06 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Thu, 22 Mar 2007 11:43:28 GMT]]></title><description><![CDATA[<p>Sizeof von hallo ergibt natürlich die Größe von int, und nicht 0. Wenn man die Adresse von hallo im Programm nimmt muss man auch (bei statischen Membern) Speicher für die Konstante zur Verfügung stellen, und dessen Größe ist logischerweise auch 4. Man könnte sogar mit const_cast-Gemeinheiten den Wert an dieser Stelle ändern.</p>
<p>Aber darum gehts garnicht, das wichtige ist doch dass solche Konstanten in C++ (im Gegensatz zu C) vom Compiler als konstant angesehen und damit zur Compile-Zeit ersetzt werden können. Selbst wenn Du den Wert per const_cast zur Laufzeit änderst ist der Compiler berechtigt davon auszugehen dass Du das nicht tust.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250408</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 22 Mar 2007 11:43:28 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Thu, 22 Mar 2007 11:45:40 GMT]]></title><description><![CDATA[<p>Es ist halt ein Sprach-Element und kein Textersetzer-Element. Man man sollte immer Sprachelemente bevorzugen. Da der Compiler die Hoheit über den endgültigen Code hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250409</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Thu, 22 Mar 2007 11:45:40 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Thu, 22 Mar 2007 11:52:46 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Sizeof von hallo ergibt natürlich die Größe von int, und nicht 0. Wenn man die Adresse von hallo im Programm nimmt muss man auch (bei statischen Membern) Speicher für die Konstante zur Verfügung stellen, und dessen Größe ist logischerweise auch 4. Man könnte sogar mit const_cast-Gemeinheiten den Wert an dieser Stelle ändern.</p>
</blockquote>
<p>hmmm? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
jetzt bin ich ganz schön verwirrt. konstanten, deren wert man zur laufzeit ändern kann? wie passt denn das zusammen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
so langsam komme ich zu dem schluss, dass #define hierfür doch besser geeignet ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250411</guid><dc:creator><![CDATA[vista]]></dc:creator><pubDate>Thu, 22 Mar 2007 11:52:46 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Thu, 22 Mar 2007 12:11:07 GMT]]></title><description><![CDATA[<p>Lies Lordjaxoms Beitrag noch mal genauer durch. Er hat nicht gesagt, das man einfach so zur Laufzeit einen const-Wert ändern kann. Sondern du mußt das schon mit speziellen Mitteln (const_cast) explizit zun. Im Übrigen: in C++ benutzt man eh enums oder man kapselt const-Variablen als private in Klassen. DIE kann man definitiv nicht ändern. Auch nicht mit nem const_cast. Wir reden hier die ganze Zeit über normale Variablen. Aber C++ hat mehr Sprachmittel, mit denen ich sowas ausschliessen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250425</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Thu, 22 Mar 2007 12:11:07 GMT</pubDate></item><item><title><![CDATA[Reply to Änderungen von Variablen in Variable speichern on Thu, 22 Mar 2007 12:15:44 GMT]]></title><description><![CDATA[<p>Um es nochmal zu spezifizieren: Man kann mit const_cast viel gemeines tun, sogar statische Memberkonstanten ändern. Können im Sinne von es compiliert.</p>
<p>Der Standard sagt aber dass das Entfernen von const und das darauffolgende Ändern eines Wertes nur dann definiert ist, wenn der Ursprungswert nicht konstant ist. Was undefiniert bedeutet, brauch ich Dir wohl nicht zu sagen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Das folgende Beispiel compiliert z.B. wunderbar, stürzt aber (MSVC++ 8.0, WinXP) mit einem Speicherzugriffsfehler ab, da der Ursprungswert konstant war.</p>
<pre><code class="language-cpp">class ConstGehampel {
public:
	static const int guenelpf = 101;
};

int main(int argc, char* argv[])
{
	cout &lt;&lt; sizeof(ConstGehampel::guenelpf) &lt;&lt; endl; // Hat Größe
	cout &lt;&lt; &amp;ConstGehampel::guenelpf &lt;&lt; endl; // Hat Adresse

	cout &lt;&lt; ConstGehampel::guenelpf &lt;&lt; endl;
	const_cast&lt;int&amp;&gt;(ConstGehampel::guenelpf) = 12; // BOOOOM
	cout &lt;&lt; ConstGehampel::guenelpf &lt;&lt; endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1250427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250427</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 22 Mar 2007 12:15:44 GMT</pubDate></item></channel></rss>