оптимизация кода на C++

     // main.cpp
 #include <iostream>
 #include "Color.h"
 #include <string>
 #include "readFile.h"
using namespace std;
int main(void){
cout << RED <<  openReadf("Name.txt", true) << RESET << endl;
     closeReadf();
  return 0;

}


   // feadFile.h
         #include <iostream>
         #include <fstream>
         #include <string.h>
         #include <stdio.h>
         #include "Color.h"


     //buffer static
      static char buffer[100000] [100000];
      //clear buffer
     int closeReadf(){
     memset(buffer, 0, sizeof(buffer));

   return 0;
        }
     //method for reading files
    std :: string openReadf(std :: string rFile,bool inText){
        int i = 0;
          std :: ifstream file;
          std ::string inPut;
              file.open(rFile);
            if(file.is_open()){
                   
             while(!file.eof()){  // check for file existence
                      // buffer overflow check
                  if(sizeof(buffer) >= 100000){    std::cout << RED<<"FatalError: BUFFER OVERFLOW " << RESET << std:: endl;  
             closeReadf();
                         }
    // file reading                        
        file.getline(buffer[i],sizeof(buffer));
   if (inText == true){ //output file content
       inPut += buffer[i];
       inPut += "\n";
   }
    i++;
    }                                     
      }
    else{
         std :: cout << RED <<"FatalError: Not Found File 404" << RESET<< std :: endl;
                         std :: cin.get();
                                    inPut == "";      
    }
    file.close();
    return inPut;
           }

   // Color.h

   //Symbol color
    #define RED "\033[1;31m"
    #define BLUE "\033[0;34m"
    #define RESET "\033[0m"
    #define WHITE "\033[1;37m"
    #define YELLOW "\033[0;33m"
    #define GREEN "\033[0;32m"
    #define BLACK "\033[0;30m"
    //BackGraund
    #define BGRESET "\033[40m" 
    #define BGRED "\033[41m"
    #define BGGREEN "\033[42m"
    #define BGBROWN "\033[43m"
    #define BGBLUE "\033[44m"

Ответы (1 шт):

Автор решения: Harry

Да сколько угодно...

Например, openReadf замените просто

for(;;) std::cout << RED<<"FatalError: BUFFER OVERFLOW " << RESET << std:: endl;  

Все равно ведь у вас, раз вы ничего не читаете из файла,

while(!file.eof())

всегда истинно, а так как buffer объявлен как

static char buffer[100000] [100000];

то и sizeof(buffer) >= 100000 всегда истинно, так что

while(!file.eof())
{  
    if(sizeof(buffer) >= 100000){    std::cout << RED<<
    "FatalError: BUFFER OVERFLOW " << RESET << std:: endl;  
    closeReadf();
                     
}

превращается в бесконечный цикл, выводящий одну и ту же строку. Вызов closeReadf() при этом теряет всякий смысл...

Соответственно, и вся программа тоже оптимизируется до

int main(void)
{
    cout << RED;
    for(;;) std::cout << RED<<"FatalError: BUFFER OVERFLOW " << RESET << std:: endl;  
}

(правда, при наличии файла Name.txt).

Да! Забыл главное - если у вас программа 32-битная, то она оптимизируется до полного отсутствия, ибо столько памяти - порядка 10 Гбайт -

char buffer[100000] [100000];

она просто будет не в состоянии адресовать...

→ Ссылка