記事検索
月別アーカイブ
アクセスカウンター

    タグ絞り込み検索
    2014年11月15日17:04Statements and Declarations in Expressions

    gcc/clangでは拡張で式文がつかえるが、これはC++11で入ったlambdaで同じことができるし、オブジェクトとして扱えるとかキャプチャがあるとかでむしろ高機能なのだが、デバッグで一時的に文字列を生成したいときにalloca()で領域確保したいときにlambdaは使えなかった。

    #include <iostream>
    #include <string.h>
    #include <stdlib.h>
    int
    main()
    {
        char *p1 = ({ char* p = (char*)alloca(100); strcpy(p, "aaa"); p; });
        char *p2 = ([]() { char* p = (char*)alloca(100); strcpy(p, "bbb"); return p; })();
        std::cout << p1 << std::endl;
        std::cout << p2 << std::endl;
    }
    
    % clang++ -std=gnu++11 foo.cc
    % ./a.out
    aaa
    
    %
    

    koie



    このエントリーをはてなブックマークに追加

    トラックバックURL

    コメントする

    名前
     
      絵文字