<?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[Konstanten für verschiedene Sourcefiles in einem Headerfile deklarieren]]></title><description><![CDATA[<p>Hallo NG,</p>
<p>ich habe in diesem Beispiel zwei Sourcefiles und ein Headerfile. Im Headerfile deklariere ich eine Konstante, die in beiden Sourcefiles benötigt wird. Die Sourcefiles ergeben am Ende ein Target. Beim Linken führt das dann aber verständlicherweise zu folgendem Fehler.</p>
<blockquote>
<p>multiple definition of `max_entries'</p>
</blockquote>
<p>Das Beispiel ist wild zusammengestöpselt. Es geht also nicht darum was mit &quot;max_entries&quot; gemacht wird, sondern einzig und allein darum &quot;max_entries&quot; allen Sourcefiles zugänglich zu machen.</p>
<p>Das Headerfile:</p>
<pre><code class="language-cpp">#ifndef MAXVALUES_H
#define MAXVALUES_H

const int max_entries = 65536;

#endif
</code></pre>
<p>#include &quot;maxvalues.h&quot;</p>
<p>Das erste Sourcefile</p>
<pre><code class="language-cpp">#include &lt;stdlib.h&gt;
#include &quot;maxvalues.h&quot;

int *p_buffer = NULL;

bool create_items {
  bool retval = false;
  p_buffer = calloc( max_entries, sizeof( char ) );

  if ( NULL != p_buffer ) {
    retval = true;
  }

  return retval;
}

void remove_items {
  if ( NULL != p_buffer ) {
    free(p_buffer);
    p_buffer = NULL;
  }
}
</code></pre>
<p>Das zweite Sourcefile</p>
<pre><code class="language-cpp">#include &quot;maxvalues.h&quot;

void init_list (int *array) {
  int index = 0;

  for ( index = 0; index &lt; max_entries; index++ ) {
    array[index] = 4711;
  }
}
</code></pre>
<p>Ich benötige diesen (und einige andere Werte auch) in recht vielen Sourcefiles. Deshalb möchte ich nicht die Konstante in jedem Sourcefile mit anderem Namen deklarieren. Und Macros möchte ich aus gründen der Typsicherheit auch nicht benutzen. Zumal ein Macro zum Warning &quot;multiple definition of max_entries&quot; führen müsste.</p>
<p>Grüße und Danke schonmal,<br />
BlackPepper</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/262772/konstanten-für-verschiedene-sourcefiles-in-einem-headerfile-deklarieren</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 09:26:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/262772.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 11 Mar 2010 08:48:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konstanten für verschiedene Sourcefiles in einem Headerfile deklarieren on Thu, 11 Mar 2010 08:48:57 GMT]]></title><description><![CDATA[<p>Hallo NG,</p>
<p>ich habe in diesem Beispiel zwei Sourcefiles und ein Headerfile. Im Headerfile deklariere ich eine Konstante, die in beiden Sourcefiles benötigt wird. Die Sourcefiles ergeben am Ende ein Target. Beim Linken führt das dann aber verständlicherweise zu folgendem Fehler.</p>
<blockquote>
<p>multiple definition of `max_entries'</p>
</blockquote>
<p>Das Beispiel ist wild zusammengestöpselt. Es geht also nicht darum was mit &quot;max_entries&quot; gemacht wird, sondern einzig und allein darum &quot;max_entries&quot; allen Sourcefiles zugänglich zu machen.</p>
<p>Das Headerfile:</p>
<pre><code class="language-cpp">#ifndef MAXVALUES_H
#define MAXVALUES_H

const int max_entries = 65536;

#endif
</code></pre>
<p>#include &quot;maxvalues.h&quot;</p>
<p>Das erste Sourcefile</p>
<pre><code class="language-cpp">#include &lt;stdlib.h&gt;
#include &quot;maxvalues.h&quot;

int *p_buffer = NULL;

bool create_items {
  bool retval = false;
  p_buffer = calloc( max_entries, sizeof( char ) );

  if ( NULL != p_buffer ) {
    retval = true;
  }

  return retval;
}

void remove_items {
  if ( NULL != p_buffer ) {
    free(p_buffer);
    p_buffer = NULL;
  }
}
</code></pre>
<p>Das zweite Sourcefile</p>
<pre><code class="language-cpp">#include &quot;maxvalues.h&quot;

void init_list (int *array) {
  int index = 0;

  for ( index = 0; index &lt; max_entries; index++ ) {
    array[index] = 4711;
  }
}
</code></pre>
<p>Ich benötige diesen (und einige andere Werte auch) in recht vielen Sourcefiles. Deshalb möchte ich nicht die Konstante in jedem Sourcefile mit anderem Namen deklarieren. Und Macros möchte ich aus gründen der Typsicherheit auch nicht benutzen. Zumal ein Macro zum Warning &quot;multiple definition of max_entries&quot; führen müsste.</p>
<p>Grüße und Danke schonmal,<br />
BlackPepper</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867331</guid><dc:creator><![CDATA[BlackPepper]]></dc:creator><pubDate>Thu, 11 Mar 2010 08:48:57 GMT</pubDate></item><item><title><![CDATA[Reply to Konstanten für verschiedene Sourcefiles in einem Headerfile deklarieren on Thu, 11 Mar 2010 08:54:18 GMT]]></title><description><![CDATA[<p>Deklarier´ die Konstante in der Header Datei mit &quot;extern&quot; und definier´ sie in einer .cpp Datei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867332</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Thu, 11 Mar 2010 08:54:18 GMT</pubDate></item><item><title><![CDATA[Reply to Konstanten für verschiedene Sourcefiles in einem Headerfile deklarieren on Thu, 11 Mar 2010 09:04:34 GMT]]></title><description><![CDATA[<p>Hallo DocShoe,</p>
<p>aber dann kann ja in &quot;max_entries&quot; in jedem Sourcefile einen anderen Wert haben. Externe Variablen werden ja nicht initialisiert. Und wenn sich der Wert ändert, muß ich ja auch in jedem Sourcefile eine Änderung machen. Und ich hab Deinen Tipp gerade ausprobiert. Beim linken trat der gleiche Fehler auf, weil wieder in jedem Sourcefile die gleiche Variable declariert wurde.</p>
<p>Gruß,<br />
BlackPepper</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867334</guid><dc:creator><![CDATA[BlackPepper]]></dc:creator><pubDate>Thu, 11 Mar 2010 09:04:34 GMT</pubDate></item><item><title><![CDATA[Reply to Konstanten für verschiedene Sourcefiles in einem Headerfile deklarieren on Thu, 11 Mar 2010 09:07:38 GMT]]></title><description><![CDATA[<p>DocShoe schrieb:</p>
<blockquote>
<p>Deklarier´ die Konstante in der Header Datei mit &quot;extern&quot; und definier´ sie <strong>in einer</strong> .cpp Datei.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1867336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867336</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 11 Mar 2010 09:07:38 GMT</pubDate></item><item><title><![CDATA[Reply to Konstanten für verschiedene Sourcefiles in einem Headerfile deklarieren on Thu, 11 Mar 2010 09:16:29 GMT]]></title><description><![CDATA[<p>Hallo Fellhuhn,</p>
<p>der Sourcecode sieht nun folgendermaßen aus:<br />
Das Headerfile:</p>
<pre><code class="language-cpp">#ifndef MAXVALUES_H
#define MAXVALUES_H

extern const int max_entries;

#endif
</code></pre>
<p>#include &quot;maxvalues.h&quot;</p>
<p>Das erste Sourcefile</p>
<pre><code class="language-cpp">#include &lt;stdlib.h&gt;
#include &quot;maxvalues.h&quot;

const int max_entries = 65536;

int *p_buffer = NULL;

bool create_items {
  bool retval = false;
  p_buffer = calloc( max_entries, sizeof( char ) );

  if ( NULL != p_buffer ) {
    retval = true;
  }

  return retval;
}

void remove_items {
  if ( NULL != p_buffer ) {
    free(p_buffer);
    p_buffer = NULL;
  }
}
</code></pre>
<p>Das zweite Sourcefile</p>
<pre><code class="language-cpp">#include &quot;maxvalues.h&quot;

const int max_entries = 65536;

void init_list (int *array) {
  int index = 0;

  for ( index = 0; index &lt; max_entries; index++ ) {
    array[index] = 4711;
  }
}
</code></pre>
<p>Ich denke das war damit gemeint. Sourcefile eins und zwei lassen sich ja auch kompilieren. Die .o Datei ist da. Aber wenn der Linker alle .o Dateien zusammenlinken will, meint er immer noch:</p>
<blockquote>
<p>multiple definition of `max_entries'</p>
</blockquote>
<p>Gruß,<br />
BlackPepper</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867340</guid><dc:creator><![CDATA[BlackPepper]]></dc:creator><pubDate>Thu, 11 Mar 2010 09:16:29 GMT</pubDate></item><item><title><![CDATA[Reply to Konstanten für verschiedene Sourcefiles in einem Headerfile deklarieren on Thu, 11 Mar 2010 09:17:07 GMT]]></title><description><![CDATA[<p>Fellhuhn schrieb:</p>
<blockquote>
<p>DocShoe schrieb:</p>
<blockquote>
<p>Deklarier´ die Konstante in der Header Datei mit &quot;extern&quot; und definier´ sie <strong>in einer</strong> .cpp Datei.</p>
</blockquote>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1867341</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867341</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 11 Mar 2010 09:17:07 GMT</pubDate></item><item><title><![CDATA[Reply to Konstanten für verschiedene Sourcefiles in einem Headerfile deklarieren on Thu, 11 Mar 2010 09:21:52 GMT]]></title><description><![CDATA[<p>Hallo Fellhuhn,</p>
<p>Aaaa!!! Danke.</p>
<p>Gruß,<br />
BlackPepper</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867345</guid><dc:creator><![CDATA[BlackPepper]]></dc:creator><pubDate>Thu, 11 Mar 2010 09:21:52 GMT</pubDate></item><item><title><![CDATA[Reply to Konstanten für verschiedene Sourcefiles in einem Headerfile deklarieren on Thu, 11 Mar 2010 09:26:13 GMT]]></title><description><![CDATA[<p><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/1867347</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867347</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 11 Mar 2010 09:26:13 GMT</pubDate></item><item><title><![CDATA[Reply to Konstanten für verschiedene Sourcefiles in einem Headerfile deklarieren on Thu, 11 Mar 2010 09:47:01 GMT]]></title><description><![CDATA[<p>Eins sei die Zahl der .cpp Dateien, in der du die Konstante definierst. Auf keinen Fall sei die Zahl 2. Die drei scheidet von vorneherein aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867356</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Thu, 11 Mar 2010 09:47:01 GMT</pubDate></item><item><title><![CDATA[Reply to Konstanten für verschiedene Sourcefiles in einem Headerfile deklarieren on Thu, 11 Mar 2010 12:33:32 GMT]]></title><description><![CDATA[<p>BlackPepper schrieb:</p>
<blockquote>
<p>ich habe in diesem Beispiel zwei Sourcefiles und ein Headerfile. Im Headerfile deklariere ich eine Konstante, die in beiden Sourcefiles benötigt wird.</p>
</blockquote>
<p>Deklarierst Du sie oder definierst Du sie? Das ist ein Unterschied.</p>
<p>BlackPepper schrieb:</p>
<blockquote>
<p>Die Sourcefiles ergeben am Ende ein Target. Beim Linken führt das dann aber verständlicherweise zu folgendem Fehler.</p>
<blockquote>
<p>multiple definition of `max_entries'</p>
</blockquote>
</blockquote>
<p>Aha. Man achte auf das zweite Wort: &quot;definition&quot;.</p>
<p>BlackPepper schrieb:</p>
<blockquote>
<p>Das Beispiel ist wild zusammengestöpselt. Es geht also nicht darum was mit &quot;max_entries&quot; gemacht wird, sondern einzig und allein darum &quot;max_entries&quot; allen Sourcefiles zugänglich zu machen.</p>
<p>Das Headerfile:</p>
<pre><code class="language-cpp">#ifndef MAXVALUES_H
#define MAXVALUES_H

const int max_entries = 65536;

#endif
</code></pre>
</blockquote>
<p>Wenn das wirklich so in deinem Header drin steht, darf der Linker Dir diese Fehlermeldung nicht ausgeben. Irgendwas stimmt hier nicht. Kann es sein, dass Du das const nur hier im Beitrag stehen hast, nicht aber in Deinem Quellcode?</p>
<p>BlackPepper schrieb:</p>
<blockquote>
<p>Das erste Sourcefile</p>
<pre><code class="language-cpp">#include &lt;stdlib.h&gt;
#include &quot;maxvalues.h&quot;

...
</code></pre>
<p>Das zweite Sourcefile</p>
<pre><code class="language-cpp">#include &quot;maxvalues.h&quot;

...
</code></pre>
</blockquote>
<p>Sollte klappen. Zumindest das mit dem max_entries-Dingen. Denn Du <em>definierst</em> es im Header mit <em>const</em>, wodurch implizit eine <em>interne Bindung</em> erzwungen wird. Du hast also sozusagen zwei Konstanten. Ein max_entries für die Übersetzungseinheit &quot;erstes Sourcefile&quot; und ein max_entries&quot; für die ÜE &quot;zweites Sourcefile&quot;. Die beiden sind verschieden (da interne Bindung). Der Linker darf sich hier nicht beschweren.</p>
<p>BlackPepper schrieb:</p>
<blockquote>
<p>Ich benötige diesen (und einige andere Werte auch) in recht vielen Sourcefiles.</p>
</blockquote>
<p>Du kannst sie ruhig so in die Header-Dateien packen. Hauptsache es steht ein &quot;const&quot; dabei; denn ohne const hätten die Objekte eine externe Bindung, was dann zu Deiner Fehlermeldung führt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867455</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 11 Mar 2010 12:33:32 GMT</pubDate></item><item><title><![CDATA[Reply to Konstanten für verschiedene Sourcefiles in einem Headerfile deklarieren on Thu, 11 Mar 2010 12:40:02 GMT]]></title><description><![CDATA[<p>...zumindest impliziert <code>const</code> auf der globalen bzw Namensraum-Ebene <em><strong>bei C++</strong></em> &quot;interne Bindung&quot;. Es kann auch sein, dass Du einen C-Compiler drauf angesetzt hast, der const anders handhabt. Da müsstest Du Dich schon entscheiden. Willst Du C-kompatibel bleiben musst Du entweder noch ein &quot;static&quot; einbauen:</p>
<pre><code class="language-cpp">static const int foo = 42;
</code></pre>
<p>oder benutzt einfach</p>
<pre><code class="language-cpp">#define FOO 42
</code></pre>
<p>Letzteres ist unter C üblicher, weil der C Compiler im ersten Fall foo nicht als Compile-Zeit-Konstante ansieht und dementsprechend auch nicht in Kontexten eingesetzt werden kann, wo eine Compile-Zeit-Konstante benötigt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867458</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 11 Mar 2010 12:40:02 GMT</pubDate></item></channel></rss>