Imprimarea codului sursă al unui program C în sine

Imprimarea codului sursă al unui program C în sine

Imprimarea codului sursă al unui program C este diferită de problema Quine. Aici trebuie să modificăm orice program C astfel încât să imprime întregul cod sursă. 

Recomandat: Vă rugăm să încercați abordarea dvs {merge} mai întâi înainte de a trece la soluție.

Abordare

  1. Utilizați macrocomanda predefinită __FILE__ pentru a obține locația fișierului.
  2. Deschideți fișierul cu codul sursă în modul de citire și obțineți indicatorul de fișier fptr. Verificați dacă fișierul a fost deschis cu succes sau nu.
  3. Citiți tot conținutul fișierului folosind bucla do-while și fgetc.
  4. Închideți fișierul folosind funcția fclose.

1. Metoda FILE Macro (Imprimarea numelui fișierului)

Putem folosi conceptele de gestionare a fișierelor pentru a tipări codul sursă al programului ca rezultat. Ideea este să afișați conținutul din același fișier în care scrieți codul sursă. Locația unui fișier de programare C este conținută într-o macro predefinită __FILE__.

Mai jos este programul C pentru a utiliza __FILE__:

C
      // C program to display the    // location of the file   #include         // Driver code   int     main  ()   {      // Prints location of C this C code.      printf  (  '%s'       __FILE__  );   }      


Ieșirea programului de mai sus este locația acestui fișier C. 

Rezultatul programului 1

Implementarea

Următorul program afișează conținutul acestui fișier C (codul sursă) deoarece __FILE__ conține locația acestui fișier C într-un șir. 

2. Afișați programul

C
   // C program that prints its source code.   #include          // Driver code   int     main  (  void  )   {      // We can append this code to any C program      // such that it prints its source code.      char     c  ;         FILE     *  fp     =     fopen  (  __FILE__       'r'  );          do      {      c     =     fgetc  (  fp  );      putchar  (  c  );      }      while     (  c     !=     EOF  );          fclose  (  fp  );          return     0  ;   }   

Ieșire:

Creați un test