Note that there are some explanatory texts on larger screens.

plurals
  1. POCalling some functions before main in C
    text
    copied!<p>I'd like to do some stuffs before <code>main</code> function. I have multiple source files. In each file, there is some work that needs to be done before <code>main</code>. It was no problem in C++, but problematic with C.</p> <p>In C++, this can be done by two ways:</p> <ol> <li>Exploiting a constructor of a global class/struct.</li> <li>Calling a function to a global variable</li> </ol> <p>For example, <code>static const int __register_dummy_ = __AddRegisterMetaInfo(...);</code></p> <p>However, in C, either ways is impossible. Obviously, there is no constructor. So, the first option is inherently impossible.</p> <p>I thought that the second option would be possible, but not compiled in C (I tested only with Visual C++. It gives <a href="http://msdn.microsoft.com/en-us/library/t801az8a%28v=vs.80%29.aspx" rel="nofollow">C2099</a>.). C only allows a constant to a non-automatic variable. </p> <p>Is there any way to call some functions before main?</p> <hr> <p><strong>EDIT</strong>: It seems that many people just got misunderstand what I really wanted to do. Sorry for writing this question in a simplified way.</p> <p>What I needed to do is implementing a sort of C++ runtime class information feature, just like <a href="http://msdn.microsoft.com/en-us/library/t91eb9y9%28v=vs.80%29.aspx" rel="nofollow">MFC's approach</a>. In this approach, I need to get some information from all source code. For example, say each source file has a definition of a class, and I'd like to see all information (e.g., class names and the parent class). The easiest way is placing a static constructor in each file, and each constructor accesses a global data structure and register its information. But, I also wanted to find a way to implement a similar thing in C. So, simply calling a <code>pre_main_job</code> in <code>main</code> can't be an answer to me.</p> <p>Note that this abuse of static constructor also can be found in LLVM compiler suite. Each optimization/analysis feature is implemented as a pass. All these passes are registered via a static constructor.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload