Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is #pragma directive compiler dependent?

Tags:

c

pragma

I know and I've used #pragma startup and #pragma exit before but when I execute the following code it outputs only In main. Can anyone tell me what's happening here?

#include<stdio.h>
#pragma startup A 110
#pragma startup B
#pragma exit A
#pragma exit B 110

int main()
{
    printf("\nIn main");
    return 0;
}

void A()
{
    printf("\nIn A");
}

void B()
{
    printf("\nIn B");
}

Or is it compiler dependent? I am using gcc compiler.

like image 537
Uttam Malakar Avatar asked Mar 09 '13 18:03

Uttam Malakar


1 Answers

All #pragma directives are compiler-dependent, and a compiler is obliged to ignore any it does not recognise (ISO-9899:2011, s6.10.6: “Any such pragma that is not recognized by the implementation is ignored.”). That's why your program compiles successfully.

Functions A and B aren't called because... you don't call them. Apologies if you understand this perfectly well, but: a C program is executed by invoking the function main. If you want the functions A and B to be called, you have to do so within the main function.

(In fact, recent versions of the C standard have introduced a small number of STDC pragmas which implementations are obliged to recognise, but that doesn't importantly affect the answer)

like image 199
Norman Gray Avatar answered Sep 20 '22 12:09

Norman Gray