This blog is under construction

Sunday, 3 June 2012

#pragma directive in C

This directive provides some additional information to the compiler and it is also used to turn on or off certain special features.  For example, #pragma startup and #pragma exit were used to call specific functions during program entry (before main()) and exit(after main()) correspondingly.


Example C program to illustrate #pragma startup and #pragma exit:

  #include <stdio.h>
  void in() {
        printf("#pragma start in\n");
        printf("Inside in\n");
  }

  void out(){
        printf("#pragma exit out\n");
        printf("Inside out()\n");
  }

  #pragma startup in
  #pragma exit out

  int main() {
        printf("I am inside main function\n");
        printf("Going out of main()\n");
        return 0;
  }

  Output:
  #pragma start in
  Inside in
  I am inside main function
  Going out of main()
  #pragma exit out
  Inside out()


#pragma warn directive can be used to suppress specific warning as follows.
#pragma warn -rvl:
          suppresses warnings related to return values
#pragma warn -par:
          suppresses warnings related to parameters like unused parameters.
#pragma warn -rch:
          suppress warning related to unreachable codes.


Example C program to illustrate #pragma warn:

  #include <stdio.h>
  #pragma warn -rvl
  #pragma warn -par
  #pragma warn -rch

  int retval() {
        printf("missing to return value\n");
  }

  int unused_para(int a) {
        printf("I m not using my parameter value\n");
        return 0;
  }

  int unreachable_code() {
        printf("have some code after return statment\n");
        return 0;
        printf("Code after return statement\n");
        printf("Unreachable code\n");
  }

  int main() {
        retval();
        unused_para(8);
        unreachable_code();
        return 0;
  }

  Output:
  jp@jp-VirtualBox:~/$ gcc pragmawarn.c
  jp@jp-VirtualBox:~/cpgms/$ ./a.out
  missing to return value
  I m not using my parameter value
  have some code after return statment

If we check the above output, there won't be any warning messages.  This is due to the usage of #pragma warn.  If we remove those three pragma directives in our program, we will get warnings for unreachable code, unused parameters etc.


1 comment: