zoukankan      html  css  js  c++  java
  • 如何运行C++ STL程序


     作者: 晨光(Morning)  关键字: C++  STL   来源: 原作 
    【声明】如需复制、传播,请附上本声明,谢谢。原文出处:http://morningspace.51.net/moyingzz@etang.com 
     
     
      本文摘编自笔者自撰的 《C++ STL轻松导学》 ,简单介绍了在特定c++编译器环境下运行STL程序的一些细节,并提供了一些可能遇到的问题的解决办法,适合于还没有运行过STL程序的c++ fans阅读。 
      
      此处选用了目前在Windows平台下较为常见的Microsoft Visual C++ 6.0和Borland C++ Builder 6.0作为例子。尽管Visual C++ 6.0对最新的ANSI/ISO C++标准支持的并不是很好。不过据称Visual C++ .NET(也就是VC7.0)在这方面的性能有所改善。 
      
      你可以选用多种方式运行STL程序,比如在Visual C++下,你可以直接在DOS命令行状态下编译运行,也可以在VC的IDE下采用控制台应用程序(Console Application)的方式运行。对于C++ Builder,情况也类似。 
     
       对于Visual C++而言,如果是在DOS命令行状态下,你首先需要找到它的编译器。假定你的Visual C++装在C:/Program Files/Microsoft Visual Studio/VC98下面,则其编译器所在路径应该是C:/Program Files/Microsoft Visual Studio/VC98/Bin,在那里你可以找到cl.exe文件。编译时请加上/GX和/MT参数。如果一切正常,结果就会产生一个可执行文件。如下所示: 
      
       cl /GX /MT first_stl_prg.cpp 
      
      前一个参数用于告知编译器允许异常处理(Exception Handling)。在P. J. Plauger STL中的很多地方使用了异常处理机制(即try…throw…catch语法),所以应该加上这个参数,否则会有如下警告信息:  
     
       warning C4530: C++ exception handler used, but unwind semantics are not enabled. 
      
      后一个参数则用于使程序支持多线程,它需要在链接时使用LIBCMT.LIB库文件。不过P. J. Plauger STL并不是线程安全的(thread safety)。如果你是在VC环境下使用像STLport这样的STL实现版本,则需要加上这个参数,因为STLport是线程安全的。 
     
       如果在IDE环境下,可以在新建工程的时候选择控制台应用程序。至于那些参数的设置,则可以通过在Project功能菜单项中的Settings功能【Alt+F7】中设置编译选项来完成。 
     
       有时,在IDE环境下编译STL程序时,可能会出现如下警告信息: 
      
       warning C4786: '……' : identifier was truncated to '255' characters in the debug information 
      
      这是因为编译器在Debug状态下编译时,把程序中所出现的标识符长度限制在了255个字符范围内。如果超过最大长度,这些标识符就无法在调试阶段查看和计算了。而在STL程序中大量的用到了模板函数和模板类,编译器在实例化这些内容时,展开之后所产生的标识符往往很长(没准会有一千多个字符!)。如果你想认识一下这个warning的话,很简单,在程序里加上如下一行代码:
     
     vector<string>  string_array;  // 类似于字符串数组变量
      
      对于这样的warning,当然可以置之不理,不过也是有解决办法的。 你可以在文件开头加入下面这一行:#pragma warning(disable: 4786)。它强制编译器忽略这个警告信息,这种做法虽然有点粗鲁,但是很有效。 
      
      至于C++ Builder,其DOS命令行状态下的运行方式是这样的。假如你的C++ Builder装在C:/Program Files/Borland/CBuilder6。则其编译器所在路径应该是C:/Program Files/ Borland/CBuilder6/Bin,在那里你可以找到bcc32.exe文件,输入如下命令,即大功告成了: 
     
        bcc32 example2_2.cpp 
     
       至于IDE环境下,则可以在新建应用程序的时候,选择控制台向导(Console Wizard)。 
      
      现在你可以在你的机器上运行前面的示例程序了。不过,请恕我多嘴,有些细节不得不提请你注意。小心编译器给你留下的陷阱。请看如下代码:
     
     typedef vector<int>    int_vector;
    typedef back_insert_iterator< int_vector > back_ins_itr;
      
      请留意">"前面的空格,最好不要省去。如果你吝惜这点空格所占用的磁盘空间的话,那就太不划算了。其原因还是在于C++编译器本身的缺陷。上述代码,相当于如下代码(编译器做的也正是这样的翻译工作): 
      
     typedef back_insert_iterator< vector<int> > back_ins_itr;
      
      如果你没有加空格的话,编译器会把">>"误认为是单一标识(看起来很像那个数据流输入操作符">>")。为了回避这个难题,C++要求使用者必须在两个右尖括号之间插入空格。所以,你最好还是老老实实照我的话做,以避免不必要的麻烦。不过有趣的是,对于上述那行展开前的代码,在Visual C++里即使你没有加空格,编译器也不会报错。而同样的代码在C++ Builder中没有那么幸运了。不过,最好还是不要心存侥幸,如果你采用展开后的书写方式,则两个编译器都不会给你留情面了。 
     
      好了,请原谅我的絮叨,现在你可以亲身感受一下STL所带给你的真正独特魅力了,祝你好运! 
     
      注:本文已在csdn上贴出,查看相关评论请到 这里

    原文:http://morningspace.51.net/document/computer/PLHowToRunSTL.xml

  • 相关阅读:
    SoapUI 使用笔记
    git 使用笔记(二)
    git 使用笔记(一)
    jquery 拓展
    hdu 1024 Max Sum Plus Plus (DP)
    hdu 2602 Bone Collector (01背包)
    hdu 1688 Sightseeing (最短路径)
    hdu 3191 How Many Paths Are There (次短路径数)
    hdu 2722 Here We Go(relians) Again (最短路径)
    hdu 1596 find the safest road (最短路径)
  • 原文地址:https://www.cnblogs.com/deltacat/p/3292596.html
Copyright © 2011-2022 走看看