How does the below program output `C89` when compiled in C89 mode and `C99` when compiled in C99 mode?

前端 未结 3 2005
死守一世寂寞
死守一世寂寞 2021-01-30 04:48

I\'ve found this C program from the web:

#include 

int main(){

    printf(\"C%d\\n\",(int)(90-(-4.5//**/
    -4.5)));

    return 0;
}


        
相关标签:
3条回答
  • 2021-01-30 05:15

    the line comment // is introduced since C99. Therefore your code is equal to this in C89

    #include <stdio.h>
    
    int main(){
    
        printf("C%d\n",(int)(90-(-4.5/
    -4.5)));
    
        return 0;
    }
    /* 90 - (-4.5 / -4.5) = 89 */
    

    and equal to this in C99

    #include <stdio.h>
    
    int main(){
    
        printf("C%d\n",(int)(90-(-4.5
    -4.5)));
    
        return 0;
    }
    /* 90 - (-4.5 - 4.5) = 99*/
    
    0 讨论(0)
  • 2021-01-30 05:15

    Because // comments only exist in C99 and later standards, the code is equivalent to the following:

    #include <stdio.h>
    
    int main (void)
    {
      int vers;
    
      #if   __STDC_VERSION__ >= 201112L
        vers = 99; // oops
      #elif __STDC_VERSION__ >= 199901L
        vers = 99;
      #else
        vers = 90;
      #endif
    
      printf("C%d", vers);
    
      return 0;
    }
    

    Correct code would be:

    #include <stdio.h>
    
    int main (void)
    {
      int vers;
    
      #if   __STDC_VERSION__ >= 201112L
        vers = 11;
      #elif __STDC_VERSION__ >= 199901L
        vers = 99;
      #else
        vers = 90;
      #endif
    
      printf("C%d", vers);
    
      return 0;
    }
    
    0 讨论(0)
  • 2021-01-30 05:22

    C99 allows //-style comments, C89 does not. So, to translate:

    C99:

     printf("C%d\n",(int)(90-(-4.5     /*Some  comment stuff*/
                             -4.5)));
    // Outputs: 99
    

    C89:

    printf("C%d\n",(int)(90-(-4.5/      
                             -4.5)));
    /* so  we get 90-1 or 89 */
    
    0 讨论(0)
提交回复
热议问题