我用vc做了一个C语言编译器,现在已经能够编译程序了,并可以生成exe,运行我就是直接用函数打开exe做的,不过想hello world!这样只输出的程序运行时就闪了一下就没有了,我知道可以在程序里加入getch()  system("pause"); 等语句,但我看vc的编译器不用加这样的语句,一样可以输出press   any   key   to   continue!,请问大家如何实现呢!谢谢各位了!!

解决方案 »

  1.   

    char   buf[5]={0}; 
    gets(buf);    
      

  2.   

    好像C语言下必须要getch()吧,要么就是VC里隐式调用了getch(),而你并没有看到
      

  3.   

    我用vc做了一个C语言编译器,现在已经能够编译程序了,并可以生成exe,
    -------------------------
    高人啊!太厉害了。
      

  4.   

    谢谢各位发表意见,我猜想是vc隐式的调用了getch(),要是没有其他办法,就也隐式的调用一下吧,我有测试了tc2.0,它也有这样的反应
      

  5.   

    c编译器!强啊,楼主啥时候把code贴出来啊,顶一个
      

  6.   

    花个十分钟调试了一下VC6的实现,结果如下:Ctrl+F5直接运行其实并不是直接运行,而是调用的vcspawn,带了几个参数:vcspawn -t -p "d:\test.exe".而VCSPAWN则是调用CreateProcess之后再调用了_getch()而已。模拟该过程的基本代码如下:#include <windows.h>
    #include <stdio.h>
    #include <conio.h>int main(int argc, char * argv[]) { 
        STARTUPINFO si = {0};
    si.cb = sizeof(si);
    PROCESS_INFORMATION pi = {0}; CreateProcess(NULL, "notepad.exe", NULL, NULL, TRUE , 0, NULL, 0, &si, &pi);
    CloseHandle(pi.hThread); WaitForSingleObject(pi.hProcess, -1); int nExitCode = 0;
    ::GetExitCodeProcess(pi.hProcess, (LPDWORD)&nExitCode);
    CloseHandle(pi.hProcess); printf("press any key to continue...\n"); _getch();
        return nExitCode; 
    }
    当然,实际的处理会稍微复杂一些,比如判断一下要执行的程序是不是GUI程序,如果是GUI程序就直接CreateProcess就完了,不必再press any key to continue了。谨慎怀疑lz不是用vc做了一个C语言编译器,只是用vc了一个C语言编译器吧。有足够能力独立完成一个C编译器,我就不信连这点钻研精神都没有,最后被这个难住。
      

  7.   

    测试代码中的notepad.exe改成一个Console程序就可以了。
      

  8.   

    好像C语言下必须要getch()吧,要么就是VC里隐式调用了getch(),你编译的环境不同导致