Brainfuck interpreter in C 3Brainfuck InterpreterBrainfuck interpreter in CBrainfuck interpreter in JavaScriptBrainfuck Interpreter in JavaBrainFuck Interpreter in C++Brainfuck interpreter in ClojureBasic Brainfuck Interpreter in CJava Brainfuck Interpreter MethodRuby Brainfuck interpreterObject-oriented Brainfuck interpreter

How long to clear the 'suck zone' of a turbofan after start is initiated?

Customer Requests (Sometimes) Drive Me Bonkers!

How do I rename a Linux host without needing to reboot for the rename to take effect?

Tiptoe or tiphoof? Adjusting words to better fit fantasy races

What does the word "Atten" mean?

Pole-zeros of a real-valued causal FIR system

Is this apparent Class Action settlement a spam message?

How to write papers efficiently when English isn't my first language?

How did Doctor Strange see the winning outcome in Avengers: Infinity War?

How did Arya survive the stabbing?

Do all network devices need to make routing decisions, regardless of communication across networks or within a network?

Is there a problem with hiding "forgot password" until it's needed?

How many times can American Tourist re-enter UK in same 6 month period?

How do I go from 300 unfinished/half written blog posts, to published posts?

How does buying out courses with grant money work?

Why not increase contact surface when reentering the atmosphere?

Large drywall patch supports

when is out of tune ok?

Go Pregnant or Go Home

Two monoidal structures and copowering

How can a function with a hole (removable discontinuity) equal a function with no hole?

India just shot down a satellite from the ground. At what altitude range is the resulting debris field?

CREATE opcode: what does it really do?

Are student evaluations of teaching assistants read by others in the faculty?



Brainfuck interpreter in C 3


Brainfuck InterpreterBrainfuck interpreter in CBrainfuck interpreter in JavaScriptBrainfuck Interpreter in JavaBrainFuck Interpreter in C++Brainfuck interpreter in ClojureBasic Brainfuck Interpreter in CJava Brainfuck Interpreter MethodRuby Brainfuck interpreterObject-oriented Brainfuck interpreter













0












$begingroup$


I created my brainfuck interpreter and I would like to know what can be done better and is the code clear and readable. I will be very thankful for opinions and suggestions.
Here is the code:



#include <stdio.h>
#include <stdlib.h>

#define ALLOCATION_ERROR 1
#define FILE_ERROR 2
#define OTHER_ERROR 3
#define TAPE_SIZE 30000

int main(int argc,char** argv)
if(argc!=2)
puts("Usage: main <source>");
exit(OTHER_ERROR);

unsigned char* tape=calloc(TAPE_SIZE,1);
if(tape==NULL)
fprintf(stderr,"Fatal: failed to allocate %zu bytes.n",(size_t)TAPE_SIZE*1);
exit(ALLOCATION_ERROR);

unsigned char* tape_ptr=tape;
FILE* input_file=fopen(argv[1],"rb");
if(input_file==NULL)
fprintf(stderr,"Error: failed to open file %sn",argv[1]);
exit(FILE_ERROR);

fseek(input_file,0,SEEK_END);
size_t code_size=(size_t)ftell(input_file);
fseek(input_file,0,SEEK_SET);
unsigned char* code=malloc(code_size+1);
if(code==NULL)
fprintf(stderr,"Fatal: failed to allocate %zu bytes.n",code_size+1);
exit(ALLOCATION_ERROR);

if(fread(code,1,code_size,input_file)!=code_size)
fprintf(stderr,"Error: failed to read from file %sn",argv[1]);
exit(FILE_ERROR);

code[code_size]=0;
for(unsigned char* code_ptr=code;*code_ptr;++code_ptr)
switch(*code_ptr)
case '>':
++tape_ptr;
break;
case '<':
--tape_ptr;
break;
case '+':
++*tape_ptr;
break;
case '-':
--*tape_ptr;
break;
case ',':
*tape_ptr=(unsigned char)getchar();
break;
case '.':
putchar(*tape_ptr);
fflush(stdout);
break;
case '[':
if(!*tape_ptr)
int loop=1;
while(loop)
++code_ptr;
if(*code_ptr=='[')
++loop;
if(*code_ptr==']')
--loop;


break;
case ']':
if(*tape_ptr)
int loop=1;
while(loop)
--code_ptr;
if(*code_ptr=='[')
--loop;
if(*code_ptr==']')
++loop;


break;


free(tape);
free(code);









share









$endgroup$
















    0












    $begingroup$


    I created my brainfuck interpreter and I would like to know what can be done better and is the code clear and readable. I will be very thankful for opinions and suggestions.
    Here is the code:



    #include <stdio.h>
    #include <stdlib.h>

    #define ALLOCATION_ERROR 1
    #define FILE_ERROR 2
    #define OTHER_ERROR 3
    #define TAPE_SIZE 30000

    int main(int argc,char** argv)
    if(argc!=2)
    puts("Usage: main <source>");
    exit(OTHER_ERROR);

    unsigned char* tape=calloc(TAPE_SIZE,1);
    if(tape==NULL)
    fprintf(stderr,"Fatal: failed to allocate %zu bytes.n",(size_t)TAPE_SIZE*1);
    exit(ALLOCATION_ERROR);

    unsigned char* tape_ptr=tape;
    FILE* input_file=fopen(argv[1],"rb");
    if(input_file==NULL)
    fprintf(stderr,"Error: failed to open file %sn",argv[1]);
    exit(FILE_ERROR);

    fseek(input_file,0,SEEK_END);
    size_t code_size=(size_t)ftell(input_file);
    fseek(input_file,0,SEEK_SET);
    unsigned char* code=malloc(code_size+1);
    if(code==NULL)
    fprintf(stderr,"Fatal: failed to allocate %zu bytes.n",code_size+1);
    exit(ALLOCATION_ERROR);

    if(fread(code,1,code_size,input_file)!=code_size)
    fprintf(stderr,"Error: failed to read from file %sn",argv[1]);
    exit(FILE_ERROR);

    code[code_size]=0;
    for(unsigned char* code_ptr=code;*code_ptr;++code_ptr)
    switch(*code_ptr)
    case '>':
    ++tape_ptr;
    break;
    case '<':
    --tape_ptr;
    break;
    case '+':
    ++*tape_ptr;
    break;
    case '-':
    --*tape_ptr;
    break;
    case ',':
    *tape_ptr=(unsigned char)getchar();
    break;
    case '.':
    putchar(*tape_ptr);
    fflush(stdout);
    break;
    case '[':
    if(!*tape_ptr)
    int loop=1;
    while(loop)
    ++code_ptr;
    if(*code_ptr=='[')
    ++loop;
    if(*code_ptr==']')
    --loop;


    break;
    case ']':
    if(*tape_ptr)
    int loop=1;
    while(loop)
    --code_ptr;
    if(*code_ptr=='[')
    --loop;
    if(*code_ptr==']')
    ++loop;


    break;


    free(tape);
    free(code);









    share









    $endgroup$














      0












      0








      0





      $begingroup$


      I created my brainfuck interpreter and I would like to know what can be done better and is the code clear and readable. I will be very thankful for opinions and suggestions.
      Here is the code:



      #include <stdio.h>
      #include <stdlib.h>

      #define ALLOCATION_ERROR 1
      #define FILE_ERROR 2
      #define OTHER_ERROR 3
      #define TAPE_SIZE 30000

      int main(int argc,char** argv)
      if(argc!=2)
      puts("Usage: main <source>");
      exit(OTHER_ERROR);

      unsigned char* tape=calloc(TAPE_SIZE,1);
      if(tape==NULL)
      fprintf(stderr,"Fatal: failed to allocate %zu bytes.n",(size_t)TAPE_SIZE*1);
      exit(ALLOCATION_ERROR);

      unsigned char* tape_ptr=tape;
      FILE* input_file=fopen(argv[1],"rb");
      if(input_file==NULL)
      fprintf(stderr,"Error: failed to open file %sn",argv[1]);
      exit(FILE_ERROR);

      fseek(input_file,0,SEEK_END);
      size_t code_size=(size_t)ftell(input_file);
      fseek(input_file,0,SEEK_SET);
      unsigned char* code=malloc(code_size+1);
      if(code==NULL)
      fprintf(stderr,"Fatal: failed to allocate %zu bytes.n",code_size+1);
      exit(ALLOCATION_ERROR);

      if(fread(code,1,code_size,input_file)!=code_size)
      fprintf(stderr,"Error: failed to read from file %sn",argv[1]);
      exit(FILE_ERROR);

      code[code_size]=0;
      for(unsigned char* code_ptr=code;*code_ptr;++code_ptr)
      switch(*code_ptr)
      case '>':
      ++tape_ptr;
      break;
      case '<':
      --tape_ptr;
      break;
      case '+':
      ++*tape_ptr;
      break;
      case '-':
      --*tape_ptr;
      break;
      case ',':
      *tape_ptr=(unsigned char)getchar();
      break;
      case '.':
      putchar(*tape_ptr);
      fflush(stdout);
      break;
      case '[':
      if(!*tape_ptr)
      int loop=1;
      while(loop)
      ++code_ptr;
      if(*code_ptr=='[')
      ++loop;
      if(*code_ptr==']')
      --loop;


      break;
      case ']':
      if(*tape_ptr)
      int loop=1;
      while(loop)
      --code_ptr;
      if(*code_ptr=='[')
      --loop;
      if(*code_ptr==']')
      ++loop;


      break;


      free(tape);
      free(code);









      share









      $endgroup$




      I created my brainfuck interpreter and I would like to know what can be done better and is the code clear and readable. I will be very thankful for opinions and suggestions.
      Here is the code:



      #include <stdio.h>
      #include <stdlib.h>

      #define ALLOCATION_ERROR 1
      #define FILE_ERROR 2
      #define OTHER_ERROR 3
      #define TAPE_SIZE 30000

      int main(int argc,char** argv)
      if(argc!=2)
      puts("Usage: main <source>");
      exit(OTHER_ERROR);

      unsigned char* tape=calloc(TAPE_SIZE,1);
      if(tape==NULL)
      fprintf(stderr,"Fatal: failed to allocate %zu bytes.n",(size_t)TAPE_SIZE*1);
      exit(ALLOCATION_ERROR);

      unsigned char* tape_ptr=tape;
      FILE* input_file=fopen(argv[1],"rb");
      if(input_file==NULL)
      fprintf(stderr,"Error: failed to open file %sn",argv[1]);
      exit(FILE_ERROR);

      fseek(input_file,0,SEEK_END);
      size_t code_size=(size_t)ftell(input_file);
      fseek(input_file,0,SEEK_SET);
      unsigned char* code=malloc(code_size+1);
      if(code==NULL)
      fprintf(stderr,"Fatal: failed to allocate %zu bytes.n",code_size+1);
      exit(ALLOCATION_ERROR);

      if(fread(code,1,code_size,input_file)!=code_size)
      fprintf(stderr,"Error: failed to read from file %sn",argv[1]);
      exit(FILE_ERROR);

      code[code_size]=0;
      for(unsigned char* code_ptr=code;*code_ptr;++code_ptr)
      switch(*code_ptr)
      case '>':
      ++tape_ptr;
      break;
      case '<':
      --tape_ptr;
      break;
      case '+':
      ++*tape_ptr;
      break;
      case '-':
      --*tape_ptr;
      break;
      case ',':
      *tape_ptr=(unsigned char)getchar();
      break;
      case '.':
      putchar(*tape_ptr);
      fflush(stdout);
      break;
      case '[':
      if(!*tape_ptr)
      int loop=1;
      while(loop)
      ++code_ptr;
      if(*code_ptr=='[')
      ++loop;
      if(*code_ptr==']')
      --loop;


      break;
      case ']':
      if(*tape_ptr)
      int loop=1;
      while(loop)
      --code_ptr;
      if(*code_ptr=='[')
      --loop;
      if(*code_ptr==']')
      ++loop;


      break;


      free(tape);
      free(code);







      c interpreter brainfuck





      share












      share










      share



      share










      asked 5 mins ago









      DeBos99DeBos99

      315




      315




















          0






          active

          oldest

          votes











          Your Answer





          StackExchange.ifUsing("editor", function ()
          return StackExchange.using("mathjaxEditing", function ()
          StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
          StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
          );
          );
          , "mathjax-editing");

          StackExchange.ifUsing("editor", function ()
          StackExchange.using("externalEditor", function ()
          StackExchange.using("snippets", function ()
          StackExchange.snippets.init();
          );
          );
          , "code-snippets");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "196"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216381%2fbrainfuck-interpreter-in-c-3%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes















          draft saved

          draft discarded
















































          Thanks for contributing an answer to Code Review Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          Use MathJax to format equations. MathJax reference.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216381%2fbrainfuck-interpreter-in-c-3%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          बाताम इन्हें भी देखें सन्दर्भ दिक्चालन सूची1°05′00″N 104°02′0″E / 1.08333°N 104.03333°E / 1.08333; 104.033331°05′00″N 104°02′0″E / 1.08333°N 104.03333°E / 1.08333; 104.03333

          Why is the 'in' operator throwing an error with a string literal instead of logging false?Why can't I use switch statement on a String?Python join: why is it string.join(list) instead of list.join(string)?Multiline String Literal in C#Why does comparing strings using either '==' or 'is' sometimes produce a different result?How to initialize an array's length in javascript?How can I print literal curly-brace characters in python string and also use .format on it?Why does ++[[]][+[]]+[+[]] return the string “10”?Why is char[] preferred over String for passwords?Why does this code using random strings print “hello world”?jQuery.inArray(), how to use it right?

          How can we generalize the fact of finite dimensional vector space to an infinte dimensional case?$k[x]$-module and cyclic module over a finite dimensional vector spaceSubspace of a finite dimensional space is finite dimensionalIf V is an infinite-dimensional vector space, and S is an infinite-dimensional subspace of V, must the dimension of V/S be finite? ExplainWhy is an infinite dimensional space so different than a finite dimensional one?base for finite dimensional vector space is not infinite dimensional vector space?Any finite-dimensional vector space is the dual space of anotherHaving Trouble Understanding Meaning Of A Finite-Dimensional Vector SpaceProve that “Every subspaces of a finite-dimensional vector space is finite-dimensional”Ring as a finite dimensional Vector space over a field KQuestion regarding basis and dimension