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

Ask A Question

Stats

  • Questions 210k
  • Answers 210k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer Try git revert cb2a6b1. If it's not automatically able to… May 12, 2026 at 10:02 pm
  • Editorial Team
    Editorial Team added an answer You can use BindingFlags.DeclaredOnly with Type.GetProperties to search only the… May 12, 2026 at 10:02 pm
  • Editorial Team
    Editorial Team added an answer You implement your List using the ObservableCollection<T> class. When items… May 12, 2026 at 10:02 pm

Related Questions

I am reading Microsoft's CRT source code, and I can come up with the
What are good c++ to C# articles/tutorial or books? I am reading http://msdn.microsoft.com/en-us/magazine/cc301520.aspx and
I am reading the book Programming Applications for Microsoft Office Outlook : 2007. In
I am reading data from an Excel 2007 spreadsheet using ADO. Setting up the
I am reading in what i thought was just basic text from an .html

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

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.