Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 166903
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 11, 20262026-05-11T12:10:48+00:00 2026-05-11T12:10:48+00:00

I am reading Microsoft’s CRT source code, and I can come up with the

  • 0

I am reading Microsoft’s CRT source code, and I can come up with the following code, where the function __initstdio1 will be executed before main() routine.

The question is, how to execute some code before entering the main() routine in VC (not VC++ code)?

#include <stdio.h>  #pragma section('.CRT$XIC',long,read)  int __cdecl __initstdio1(void);  #define _CRTALLOC(x) __declspec(allocate(x))  _CRTALLOC('.CRT$XIC') static pinit = __initstdio1;  int z = 1;  int __cdecl __initstdio1(void) {     z = 10;     return 0; }  int main(void) {     printf('Some code before main!\n');     printf('z = %d\n', z);     printf('End!\n');     return 0; } 

The output will be:

Some code before main! z = 10 End! 

However, I am not able to understand the code.

I have done some google on .CRT$XIC but no luck is found. Can some expert explain above code segment to me, especially the followings:

  1. What does this line _CRTALLOC('.CRT$XIC') static pinit = __initstdio1; mean? What is the significance of the variable pinit?
  2. During compilation the compiler (cl.exe) throws a warning saying as below:

Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80×86 Copyright (C) Microsoft Corporation. All rights reserved.

stdmacro.c stdmacro.c(9) : warning C4047: 'initializing' : 'int' differs in levels of indirection from 'int (__ cdecl *)(void)' Microsoft (R) Incremental Linker Version 9.00.30729.01 Copyright (C) Microsoft Corporation.  All rights reserved.  /out:stdmacro.exe stdmacro.obj 

What is the corrective action needs to be done to remove the warning message?

Thanks in advance.

Added:

I have modified the code and give type to pinit as _PIFV. Now the warning message is gone.

The new code is as follows:

#include <stdio.h>  #pragma section('.CRT$XIC1',long,read)  int __cdecl __initstdio1(void);  typedef int  (__cdecl *_PIFV)(void);  #define _CRTALLOC(x) __declspec(allocate(x))  _CRTALLOC('.CRT$XIC1') static _PIFV pinit1 = __initstdio1;  int z = 1;  int __cdecl __initstdio1(void) {     z = 100;      return 0; }  int main(void) {     printf('Some code before main!\n');     printf('z = %d\n', z);     printf('End!\n');     return 0; } 
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. 2026-05-11T12:10:48+00:00Added an answer on May 11, 2026 at 12:10 pm

    There’s some information here (search for CRT). The significance of variable pinit is none, it’s just a piece of data placed in the executable, where the runtime can find it. However, I would advise you to give it a type, like this:

    _CRTALLOC('.CRT$XIC') static void (*pinit)()=... 

    The linker warning probably just warns you you have a function that has int return type, but doesn’t return anything (probably you’d better change the return type to void).

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I was reading the following article: http://msdn.microsoft.com/en-us/magazine/cc817398.aspx Solving 11 Likely Problems In Your Multithreaded
Reading source code of sample projects, such as Beast and Bort, are recommended as
I was reading Microsoft's Class Room Training Materil. I read the following Unboxing Unboxing
I know from reading Microsoft documentation that the "primary" use of the IDisposable interface
Reading this question I found this as (note the quotation marks) code to solve
I was reading Microsoft's Best Practices: Data Contract Versioning , and they state: Do
What are good c++ to C# articles/tutorial or books? I am reading http://msdn.microsoft.com/en-us/magazine/cc301520.aspx and
assuming i got this main window xmal: <Window x:Class=MVVMTUTRIALS.Window1 xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml xmlns:views=clr-namespace:TestMvvm444.Views Title=Window1 Height=300
I am reading the MCTS Self-Paced Training Kit (Exam 70-536): Microsoft .NET Framework—Application Development
In the code below I have a StreamReader reading from a network stream. This

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.