<?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[Globale Makros ?]]></title><description><![CDATA[<p>Hallo,</p>
<p>über #define FAIL 0 kann man z.B ein macro schreiben.<br />
Gibt es sowas wie globale Makros die wie extern variablen global gelten können? Oder müsste ich jetzt für jedes File/Klasse z.B dasselbe Makro definieren?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/189024/globale-makros</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 07:10:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/189024.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 07 Aug 2007 15:13:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Globale Makros ? on Tue, 07 Aug 2007 15:13:41 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>über #define FAIL 0 kann man z.B ein macro schreiben.<br />
Gibt es sowas wie globale Makros die wie extern variablen global gelten können? Oder müsste ich jetzt für jedes File/Klasse z.B dasselbe Makro definieren?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340275</guid><dc:creator><![CDATA[testo]]></dc:creator><pubDate>Tue, 07 Aug 2007 15:13:41 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Makros ? on Tue, 07 Aug 2007 15:23:36 GMT]]></title><description><![CDATA[<p>Ein Makro gilt von dem Moment, wo es definiert wurde, bis zum Ende der Übersetzungseinheit (oder bis zu einem passenden #undef). Aber du kannst auch Makro-Definitionen in Headern schreiben (die dann in allen Programmen gelten, wo dieser Header eingebunden wird) oder vom Compiler vorbelegen lassen (meist mit '/D<em>name</em>=<em>wert</em>').</p>
<p>PS: Aber Makros sind böse - also solltest du dir zweimal überlegen, ob und wie du sie einsetzen willst <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/1340287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340287</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 07 Aug 2007 15:23:36 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Makros ? on Tue, 07 Aug 2007 15:59:19 GMT]]></title><description><![CDATA[<p><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="🙂"
    /> böse....ok.<br />
Also ich wollte eigentlich nur einen Return-wert definieren über ein makro.<br />
Also für die Lesbarkeit. und das wollte ich global machen. Also wenn in einer funktion return SUCCESS steht ist das ja schon mal hilfreicher als return 0 oder sonst ein int-wert.</p>
<p>oder sollte ich diesbezüglich keine globale variante verwenden und statt dessen doch 0 oder 1 hinschreiben?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340313</guid><dc:creator><![CDATA[testo]]></dc:creator><pubDate>Tue, 07 Aug 2007 15:59:19 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Makros ? on Tue, 07 Aug 2007 16:03:58 GMT]]></title><description><![CDATA[<p>Für lesbare Rückgabewerte stehen doch schon genug Bezeichnungen zur Verfügung - versuch's zum Beispiel mal mit 'true' und 'false' <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>(ansonsten reicht es doch sicher aus, die möglichen Fehlerwerte in dem Header zu definieren, in dem deine Funktion untergebracht ist - aber selbst dann würde ich eher einen enum verwenden als Makros)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340315</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 07 Aug 2007 16:03:58 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Makros ? on Tue, 07 Aug 2007 16:30:49 GMT]]></title><description><![CDATA[<p>testo schrieb:</p>
<blockquote>
<p>oder sollte ich diesbezüglich keine globale variante verwenden und statt dessen doch 0 oder 1 hinschreiben?</p>
</blockquote>
<p>Also, prinzipiell definiert man dafür globale Konstanten (*Konstanten*! Nicht Macros!). Aber wie CStoll schon sagte: für Wahrheitswerte gibt's den Datetyp 'bool' mit den konstanten Werten 'true' und 'false' und für Rückgabewerte ist all dies in den meisten Fällen ungeeignet, wenn etwas nicht klappt, wirft man lieber ne Ausnahme, anstatt den Rückgabewert dafür zu missbrauchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340322</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Tue, 07 Aug 2007 16:30:49 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Makros ? on Tue, 07 Aug 2007 16:42:42 GMT]]></title><description><![CDATA[<p>hmm....<br />
also wenn z.b folgendes nicht klappt:</p>
<pre><code class="language-cpp">if ( !( f=fopen(file,&quot;r&quot;) ) )
	{
		std::cout &lt;&lt; 
		&quot;\n\tERROR: Could not open file \&quot;%s\&quot; for read access!\n&quot; 
		&lt;&lt; file &lt;&lt; std::endl;
		return READ_FAILURE;
	}
</code></pre>
<p>soll man da wirklich nen try block drum rum machen? Außerdem brauche ihc ja fürs catch auch ein return irgendwas oder?</p>
<p>DIe main verwendet ja auch int als rückgabewert....</p>
<p>wie ist es denn sauber wenn man mehrere fehlerquellen hat die in einer funktion ein return erzweingen z.B<br />
a) datei lesen<br />
b) berechnung<br />
c) datei schreiben</p>
<p>sollte man dann für a, b und c wirklich nur einen return false ausgeben falls es zum fehler kommt?</p>
<p>wie istes üblich ?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340329</guid><dc:creator><![CDATA[testo]]></dc:creator><pubDate>Tue, 07 Aug 2007 16:42:42 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Makros ? on Tue, 07 Aug 2007 18:01:12 GMT]]></title><description><![CDATA[<p>testo schrieb:</p>
<blockquote>
<p>hmm....<br />
also wenn z.b folgendes nicht klappt:</p>
<pre><code class="language-cpp">// ...
</code></pre>
<p>soll man da wirklich nen try block drum rum machen? Außerdem brauche ihc ja fürs catch auch ein return irgendwas oder?</p>
</blockquote>
<p>Du sollst kein try darum machen, sondern statt der Ausgabe eine Exception werfen.</p>
<pre><code class="language-cpp">if ( !( f=fopen(file,&quot;r&quot;) ) )
    throw std::runtime_error (std::string (&quot;Datei &quot;) + file + &quot; ist putt&quot;);
</code></pre>
<p>testo schrieb:</p>
<blockquote>
<p>DIe main verwendet ja auch int als rückgabewert....</p>
</blockquote>
<p>Weil C das so macht und weil die Kommandozeile diesen Rückgabewert verarbeiten kann, Exceptions dagegen nicht.</p>
<p>testo schrieb:</p>
<blockquote>
<p>wie ist es denn sauber wenn man mehrere fehlerquellen hat die in einer funktion ein return erzweingen z.B<br />
a) datei lesen<br />
b) berechnung<br />
c) datei schreiben</p>
<p>sollte man dann für a, b und c wirklich nur einen return false ausgeben falls es zum fehler kommt?</p>
</blockquote>
<p>Nein, das sollte einfach nicht alles eine Funktion sein. Wenn jede Operation eine eigene Funktion ist, dann kannst du differenzierter auf die Exceptions eingehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340360</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Tue, 07 Aug 2007 18:01:12 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Makros ? on Tue, 07 Aug 2007 18:14:32 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;stdexcept&gt;

void show_file(const std::string&amp; filename)
{
    std::ifstream fs(filename.c_str(), std::ios::in);
    if (!fs)
        throw std::runtime_error(&quot;Could not open file&quot;);

    std::cout &lt;&lt; fs.rdbuf() &lt;&lt; std::endl;
}

int main()
{
    try
    {
        show_file(&quot;test.txt&quot;);
    } catch(std::runtime_error&amp; ex)
    {
        std::cout &lt;&lt; &quot;Datei: \&quot;test.txt\&quot; =&gt; &quot; &lt;&lt; ex.what() &lt;&lt; std::endl;
    }
}
</code></pre>
<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340364</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Tue, 07 Aug 2007 18:14:32 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Makros ? on Tue, 07 Aug 2007 18:39:12 GMT]]></title><description><![CDATA[<p>Danke...mir wird einiges klarer...</p>
<p>leider habe ich in Bezug auf die Exceptions jetzt eine Frage:</p>
<p>Wie würde man z.B folgendes realisieren:</p>
<pre><code class="language-cpp">int main(...)
{
     Class1 cl;
     cl.funktion1();
}

//hier in der klasse Class1
Class1::funktion1()
{
     try
    {
        show_file(&quot;test.txt&quot;);
    } catch(std::runtime_error&amp; ex)
    {
        std::cout &lt;&lt; &quot;Datei: \&quot;test.txt\&quot; =&gt; &quot; &lt;&lt; ex.what() &lt;&lt; std::endl;
    }

    //wenn weitere funktionen aus dieser funktion aufgerufen werden die
    //wiederum zum abbruch führen sollten....
    //wie mache ich das??? Wird dann wirlich immer ein try-catch block um jeden
    //funktionsaufruf gemacht? wäre doch sehr unübersichtlich. 

   //Und wie würde ich jetzt der main mitteilen dass etwas schief gelaufen ist? 
  //ich kann ja nicht sowas machen oder?:
   try
    {
        show_file(&quot;test.txt&quot;);
    } catch(std::runtime_error&amp; ex)
    {
        throw std::runtime_error(&quot;Error ist aufgetreten&quot;);
        std::cout &lt;&lt; &quot;Datei: \&quot;test.txt\&quot; =&gt; &quot; &lt;&lt; ex.what() &lt;&lt; std::endl;
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1340378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340378</guid><dc:creator><![CDATA[testo]]></dc:creator><pubDate>Tue, 07 Aug 2007 18:39:12 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Makros ? on Tue, 07 Aug 2007 19:11:01 GMT]]></title><description><![CDATA[<p>Wie wäre es mit sowas?</p>
<pre><code class="language-cpp">int main(...)
{
     Class1 cl;
     try {
         cl.funktion1();
     }
     catch(std::runtime_error&amp; ex)
     {
         std::cout &lt;&lt; &quot;Datei: \&quot;test.txt\&quot; =&gt; &quot; &lt;&lt; ex.what() &lt;&lt; std::endl;
     }
}

//hier in der klasse Class1
Class1::funktion1()
{
    show_file(&quot;test.txt&quot;);
    show_file(&quot;test.txt&quot;); //Wenn bei einer der beiden aufrufe eine Exception geworfen wird, wird sie in dem catch-block von main() aufgefangen.
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1340392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340392</guid><dc:creator><![CDATA[The-Kenny]]></dc:creator><pubDate>Tue, 07 Aug 2007 19:11:01 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Makros ? on Tue, 07 Aug 2007 19:13:51 GMT]]></title><description><![CDATA[<p>globale konstanten sind genauso böse wie makros. sind doch hier nicht in c :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340396</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Tue, 07 Aug 2007 19:13:51 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Makros ? on Tue, 07 Aug 2007 19:41:56 GMT]]></title><description><![CDATA[<p>thordk schrieb:</p>
<blockquote>
<p>globale konstanten sind genauso böse wie makros.</p>
</blockquote>
<p>Ach Quatsch. Wenn Konstanten global angesprochen werden, was spricht dann dagegen, sie global (natürlich über nen Namensbereich) zugängig zu machen?</p>
<p>Kapseln in Klassen macht man vielleicht in Java, weil es dort eben nicht anders geht. Aber denselben Sinn (nämlich der Zuordnung in einen eigenen Namensbereich) erhält man in C++ eben auch über Namensbereiche und Kompiliereinheiten bzw. Include-Dateien). Das ist ein sauberes, modulares Vorgehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340413</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Tue, 07 Aug 2007 19:41:56 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Makros ? on Tue, 07 Aug 2007 21:04:35 GMT]]></title><description><![CDATA[<p>ok danke...ich hab jetzt in der main sowas:</p>
<p>wäre das unsauber ....das bad_alloc habe ich da falls irgendwo intern mal eine alloziierung nicht klappen sollte....</p>
<p>wie beende ich eigentlich meine main....ist das ok so über den EXIT_FAILURE?<br />
Oder ist das abort() gängig?</p>
<pre><code class="language-cpp">try {
            .....
           //hier ikommen noch paar funktionsaufrufe
           ......
	         try
		{
			fkt(...);
		}
		catch (std::runtime_error&amp; ex) 
		{
			std::cout &lt;&lt; ex.what() &lt;&lt; std::endl;
			return EXIT_FAILURE;
		}
     catch (std::bad_alloc &amp;e) 
      {
		std::cerr &lt;&lt; &quot;\n\tPROGRAM ABORTED: &quot; 
				  &lt;&lt; e.what() &lt;&lt; &quot;\n\t\t  ERROR: Not enough memory.\n&quot;           &gt;&lt; std::endl;
		std::cerr &lt;&lt; &quot;\t===========================================\n&quot; &lt;&lt; std::endl;
		abort();
      }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1340448</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340448</guid><dc:creator><![CDATA[testo]]></dc:creator><pubDate>Tue, 07 Aug 2007 21:04:35 GMT</pubDate></item></channel></rss>