<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Bcsanches&#039;s Weblog</title>
	<atom:link href="http://bcsanches.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://bcsanches.wordpress.com</link>
	<description>C++ e Programação de Jogos</description>
	<lastBuildDate>Fri, 06 Nov 2009 11:48:46 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='bcsanches.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/2a6f8c64d4fd428eadcadddbadd0f35c?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Bcsanches&#039;s Weblog</title>
		<link>http://bcsanches.wordpress.com</link>
	</image>
			<item>
		<title>PontoV e o Blog</title>
		<link>http://bcsanches.wordpress.com/2009/11/06/pontov-e-o-blog/</link>
		<comments>http://bcsanches.wordpress.com/2009/11/06/pontov-e-o-blog/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 11:48:46 +0000</pubDate>
		<dc:creator>bcsanches</dc:creator>
				<category><![CDATA[noticias]]></category>

		<guid isPermaLink="false">http://bcsanches.wordpress.com/2009/11/06/pontov-e-o-blog/</guid>
		<description><![CDATA[Hoje foi inaugurado o PontoV, que é o mais novo portal brasileiro sobre desenvolvimento de jogos. O portal surgiu de uma parceria minha com o Vinícius do PontoV (http://vinigodoy.wordpress.com). 
O nosso objetivo no portal é compartilhar nossas experiências em gamedev e reunir os desenvolvedores brasileiros.
O nosso foco principal é trazer conteúdo de qualidade sobre GameDesign, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bcsanches.wordpress.com&blog=3563426&post=276&subd=bcsanches&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Hoje foi inaugurado o PontoV, que é o mais novo portal brasileiro sobre desenvolvimento de jogos. O portal surgiu de uma parceria minha com o Vinícius do PontoV (<a href="http://vinigodoy.wordpress.com">http://vinigodoy.wordpress.com</a>). </p>
<p>O nosso objetivo no portal é compartilhar nossas experiências em gamedev e reunir os desenvolvedores brasileiros.</p>
<p>O nosso foco principal é trazer conteúdo de qualidade sobre GameDesign, Java e C++, além de artigos de profissionais da área.</p>
<p>A principio não sei ao certo qual será o futuro do blog, pois tópicos sobre programação vão acabar sendo destinados ao PontoV, então estou aberto a sugestões <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>De qualquer forma nos vemos no PontoV: <a href="http://www.pontov.com.br">http://www.pontov.com.br</a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bcsanches.wordpress.com/276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bcsanches.wordpress.com/276/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bcsanches.wordpress.com/276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bcsanches.wordpress.com/276/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bcsanches.wordpress.com/276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bcsanches.wordpress.com/276/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bcsanches.wordpress.com/276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bcsanches.wordpress.com/276/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bcsanches.wordpress.com/276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bcsanches.wordpress.com/276/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bcsanches.wordpress.com&blog=3563426&post=276&subd=bcsanches&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bcsanches.wordpress.com/2009/11/06/pontov-e-o-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/47c683ae448001e8b767f74210aa3fd8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bcsanches</media:title>
		</media:content>
	</item>
		<item>
		<title>Matrizes Din&#226;micas</title>
		<link>http://bcsanches.wordpress.com/2009/08/25/matrizes_dinamicas/</link>
		<comments>http://bcsanches.wordpress.com/2009/08/25/matrizes_dinamicas/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 15:33:38 +0000</pubDate>
		<dc:creator>bcsanches</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://bcsanches.wordpress.com/?p=260</guid>
		<description><![CDATA[Voltando um pouco as bases vamos analisar neste artigo algumas possibilidades para criação de matrizes dinâmicas usando C++. Tem sido bem comum em fóruns e listas de emails o pessoal dar cabeçada com esse problema, neste artigo vou apresentar as soluções mais conhecidas e as características de cada uma.
Alocando cada Linha
A técnica que parece ser [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bcsanches.wordpress.com&blog=3563426&post=260&subd=bcsanches&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Voltando um pouco as bases vamos analisar neste artigo algumas possibilidades para criação de matrizes dinâmicas usando C++. Tem sido bem comum em fóruns e listas de emails o pessoal dar cabeçada com esse problema, neste artigo vou apresentar as soluções mais conhecidas e as características de cada uma.</p>
<h3>Alocando cada Linha</h3>
<p>A técnica que parece ser a mais popular é alocar um vetor de ponteiros e depois alocar uma linha da matriz para cada ponteiro deste vetor:</p>
<pre class="brush: cpp;">

int main(int, char **)
{
    int nlinhas = 5;
    int ncol = 5; 

    int **mat = new int*[nlinhas]; 

    for(int i = 0;i &lt; nlinhas; ++i)
        mat[i] = new int[ncol]; 

    //iniciando ela com zero
    for(int i = 0;i &lt; nlinhas; ++i)
        for(int j = 0;j &lt; ncol; ++j)
            mat[i][j] = 0; 

    //liberar memória
    for(int i = 0;i &lt; nlinhas; ++i)
        delete []mat[i]; 

    delete []mat; 

    return 0;
}
</pre>
<p>O problema dessa técnica é o grande desperdício de espaço e tempo que ela gera. O desempenho desta é o pior, principalmente pelo fato de serem necessárias varias alocações e alocações de memória em C/C++ são operações que costumam ser bem caras.</p>
<p>Mesmo ignorando o tempo de criação da matriz, o uso dela também vai ser comprometido devido a possibilidade de cada linha dela estar numa região de memória diferente e é bem provável que o cache do processador tenha dificuldades em se manter atualizado por causa disso.</p>
<p>Já o desperdício de espaço ocorre devido a necessidade de se realizar varias alocações e é comum cada alocação precisa alocar um pouco mais de espaço do que o requisitado para a estrutura de controle usada internamente para gerenciar a memória.</p>
<p>A única vantagem em utilizar este método é quando precisamos de uma matriz absurdamente grande e alocamos cada linha apenas quando existe necessidade, mas mesmo nesse caso acredito que existam técnicas melhores para se implementar uma matriz esparsa.</p>
<h3>Usando Apenas um Vetor</h3>
<p>Uma maneira mais simples de se implementar uma matriz é utilizando apenas um vetor e realizar o acesso dos elementos como se fossem uma matriz:</p>
<pre class="brush: cpp;">

int main(int, char *argv)

int main(int, char **)
{
    int nlinhas = 5;
    int ncol = 3; 

    //alocando a &quot;matriz&quot;
    int *mat = new int[nlinhas * ncol]; 

    //colocando 5 na linha 3, coluna 2
    mat[3 * ncol + 2] = 5; 

    //liberando a memoria
    delete []mat; 

    return 0;
}
</pre>
<p>Note como o código nesse caso é muito mais simples que o anterior, o único incomodo deste código é a necessidade de armazenar o tamanho da matriz (o número de linhas para ser mais preciso) e ficar passando ele como parâmetro a todo momento na hora de acessar um elemento, mas não é nada complicado criar uma classe para encapsular isso.</p>
<p>Para acessar um elemento usamos a fórmula: elem[linha * ncol + col], onde linha é o numero da linha que se quer acessar, ncol o número de colunas da matriz e col o número da coluna que se deseja acessar.</p>
<p>Como é feita apenas uma alocação é usado o minimo de memória possível, além de deixar o cache feliz na hora de acessar os dados.</p>
<h3>Utilizando std::vector</h3>
<p>Por fim, podemos utilizar o std::vector e não precisamos assim nos preocupar mais em gerenciar a memória da matriz e deixar o programa mais alinhado com o <a href="http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization" target="_blank">RAII</a>:</p>
<pre class="brush: cpp;">

#include &lt;iostream&gt;
#include &lt;vector&gt;

int main(int, char **)
{
    int ncol = 4;
    int nlinha = 3; 

    std::vector mat(ncol * nlinha);    

    //acessando elemento 2, 1 (linha 2, coluna 1)
    mat[2 * nlinha + 1] = -1; 

    std::cout &lt;&lt; mat[2 * nlinha + 0] &lt;&lt; std::endl;
    std::cout &lt;&lt; mat[2 * nlinha + 1] &lt;&lt; std::endl; 

    return 0;
}
</pre>
<p>Esse código é muito semelhante ao anterior, mas as operações de gerenciamento de memória foram encapsuladas com o uso de um std::vector, utilizando-se uma boa implementação de std::vector não deve existir diferença alguma de performance e uma diferença minima de consumo de memória entre este exemplo e o anterior.</p>
<p>Esta é a maneira mais simples que conheço para lidar com matrizes dinâmicas, mas o ideal mesmo seria construir uma template que encapsule estas operações, mas isto fica para um outro post.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bcsanches.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bcsanches.wordpress.com/260/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bcsanches.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bcsanches.wordpress.com/260/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bcsanches.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bcsanches.wordpress.com/260/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bcsanches.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bcsanches.wordpress.com/260/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bcsanches.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bcsanches.wordpress.com/260/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bcsanches.wordpress.com&blog=3563426&post=260&subd=bcsanches&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bcsanches.wordpress.com/2009/08/25/matrizes_dinamicas/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/47c683ae448001e8b767f74210aa3fd8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bcsanches</media:title>
		</media:content>
	</item>
		<item>
		<title>Problemas com Memória</title>
		<link>http://bcsanches.wordpress.com/2009/07/21/problemas-com-memoria/</link>
		<comments>http://bcsanches.wordpress.com/2009/07/21/problemas-com-memoria/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 18:17:04 +0000</pubDate>
		<dc:creator>bcsanches</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://bcsanches.wordpress.com/?p=254</guid>
		<description><![CDATA[Neste artigo vamos discutir dois problemas comuns e causam um bocado de dores de cabeça e as vezes fazem a gente perder preciosas horas de sono, vamos então conhecer os memory leaks e dangling pointers.
Memory Leaks
Memory leak ou vazamento de memória é um problema um tanto comum em C++, principalmente em casos onde o programador [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bcsanches.wordpress.com&blog=3563426&post=254&subd=bcsanches&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Neste artigo vamos discutir dois problemas comuns e causam um bocado de dores de cabeça e as vezes fazem a gente perder preciosas horas de sono, vamos então conhecer os memory leaks e dangling pointers.</p>
<h3>Memory Leaks</h3>
<p>Memory leak ou vazamento de memória é um problema um tanto comum em C++, principalmente em casos onde o programador tende alocar memória sem necessidade (o que tem se tornado bem comum com programadores que vem de linguagens onde existe um garbage collector) ou não gerencia esta corretamente esquecendo os princípios básicos do <a href="http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization" target="_blank">RAII</a>.</p>
<p>O memory leak ocorre quando um bloco de memória alocado fica sem referências, isto pode ocorrer em programas bem simples, vejamos um exemplo:</p>
<pre class="brush: cpp;">

int main(int , char **)
{
    int *p = new int;
    *p = 3; 

    p = new int;
    delete p; 

    return 0;
}
</pre>
<p>No exemplo acima, primeiramente é alocado espaço para um int e associado com o ponteiro p, logo após a atribuição do valor “3” é feita uma nova alocação e é neste ponto que o vazamento ocorre.</p>
<p>Note que a memória alocada anteriormente não foi liberada e agora o ponteiro p aponta para outro bloco de memória, a única variável que continha o endereço do primeiro bloco alocado não possui mais, sendo assim, o programa não sabe mais o endereço do bloco e não tem mais como liberar essa memória.</p>
<p>No final da execução desse programa o sistema operacional vai se encarregar de liberar toda a memória do programa, sendo assim este pequeno int que foi perdido não é problema, mas imagine o caso de um programa que tenha que funcionar em um regime 24&#215;7, e a cada segundo ele perde uma centena de ints como aquele, nesse ritmo o programa perde 400 bytes por segundo (não contando aqui o overhead da alocação, que inclui as estruturas de controle do runtime do C++ e do SO).</p>
<p>Em uma hora este programa já vai ter perdido pouco mais de 1 mega de memória, em 24 horas já vão embora 32 mega de memória. Não parece grande coisa, ainda mais hoje em dia que até computador das Casas Bahia vem com 2 gigas de memória, mas lembre-se que esta memória poderia estar sendo útil para outros processos, e no caso de um sistema embarcado este problema é bem grave, um playstation 2, por exemplo, possui apenas 32 mega de ram, então em uma hora já acabamos com boa parte da memória dele.</p>
<h3>Dangling Pointers</h3>
<p>Os ponteiros “quebrados” costumam ser bem desastrosos e ocorrem quando um ponteiro aponta para uma região de memória “invalida”. Na verdade o ponteiro apontar para algo invalido não é problema, o problema ocorre quando é feita uma tentativa de acesso nesse endereço invalido, vamos a um exemplo básico:</p>
<pre class="brush: cpp;">

#include &lt;string&gt; 

void func()
{
    std::string *str = new std::string(&quot;abc&quot;);
    delete str; 

    str-&gt;assign(&quot;bla bla&quot;);
} 

std::string *func2()
{
    std::string str; 

    return &amp;str;
} 

int main(int , char **)
{
    func(); 

    std::string *str = func2();
    str-&gt;assign(&quot;ops&quot;);

    return 0;

}
</pre>
<p>A primeira função (a func) primeiramente aloca uma std::string, libera ela da memória e depois disso tenta acessa-la. Este é o caso mais comum de um dangling pointer, onde um ponteiro armazena um endereço para um bloco de memória que já foi liberado. Nesse exemplo é muito provável que nada demais aconteça pois o uso é feito logo após a desalocação, mas não podemos esquecer que após um delete estamos dizendo ao sistema que não vamos mais usar aquela memória e ele pode fazer o que bem entender com ela, isso significa que esta memória pode inclusive ser devolvida ao sistema operacional, que pode passar ela a outro processo, sendo que tudo isso pode acontecer antes mesmo da chamada de assign, e quando assign for executado ele vai tentar acessar a memória de outro processo e teremos um belo “ding, este processo executou uma …”.</p>
<p>Em programas mais complexos pode ser que ocorram novas alocações de memória antes que o dangling pointer seja usado, nesse caso aquele bloco que foi liberado já pode estar sendo usado por outro objeto e na chamada de assign estaremos acessando uma memória que pode conter qualquer valor, onde o resultado da operação é como diz a especificação &#8220;indefinido”.</p>
<p>A função func2 mostra um outro erro bem comum onde retornamos o endereço de uma variável local, nesse caso após a função retornar o destrutor da string vai ser chamado e sem falar que o endereço que ela “reside” já vai estar disponível para outros usos, novamente é bem provável que o sistema operacional se zangue com seu processo e mate ele.</p>
<p>Um detalhe sobre a segunda função é que muitos compiladores geram um <em>warning</em> quando o programador faz algo desse tipo, sendo assim este problema é fácil de ser evitado.</p>
<h3>Evitando Esses Problemas</h3>
<p>O jeito mais simples de evitar estes problemas é utilizar alguma técnica de <a href="http://bcsanches.wordpress.com/2008/05/29/smart-pointers-introducao/">smart pointer</a>, com isso já é possível evitar os memory leaks (tem que apenas tomar cuidado com as <a href="http://bcsanches.wordpress.com/2008/07/09/boost-shared-pointers/">referencias circulares</a>).</p>
<p>Utilizando smart pointers é certo que um dangling pointer nunca vai ocorrer pois o smart pointer vai cuidar para que os ponteiros sejam sempre válidos (claro que pode ocorrer uma invasão de memória ou outro evento grotesco).</p>
<p>Infelizmente os memory leaks ainda podem ocorrer devido as referencias circulares e para tentarmos detectar estes precisamos usar outras técnicas, mas isto fica para um próximo post.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bcsanches.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bcsanches.wordpress.com/254/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bcsanches.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bcsanches.wordpress.com/254/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bcsanches.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bcsanches.wordpress.com/254/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bcsanches.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bcsanches.wordpress.com/254/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bcsanches.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bcsanches.wordpress.com/254/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bcsanches.wordpress.com&blog=3563426&post=254&subd=bcsanches&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bcsanches.wordpress.com/2009/07/21/problemas-com-memoria/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/47c683ae448001e8b767f74210aa3fd8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bcsanches</media:title>
		</media:content>
	</item>
		<item>
		<title>Mapa do C++</title>
		<link>http://bcsanches.wordpress.com/2009/06/15/mapa-do-c/</link>
		<comments>http://bcsanches.wordpress.com/2009/06/15/mapa-do-c/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 13:54:22 +0000</pubDate>
		<dc:creator>bcsanches</dc:creator>
				<category><![CDATA[noticias]]></category>

		<guid isPermaLink="false">http://bcsanches.wordpress.com/?p=250</guid>
		<description><![CDATA[Este semana rolou um email bem legal na lista de emails cppbrasil, o email continha o link para um mapa do C++ no estilo usado em mapas antigos:

O post original do mapa pode ser encontrado clicando-se aqui, inclusive contem opções de tamanho.
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bcsanches.wordpress.com&blog=3563426&post=250&subd=bcsanches&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Este semana rolou um email bem legal na lista de emails <a href="http://www.ccppbrasil.org/wiki/Grupo:Comunidade" target="_blank">cppbrasil,</a> o email continha o link para um mapa do C++ no estilo usado em mapas antigos:</p>
<p><img src="http://3.bp.blogspot.com/_VUQ3DQEhjsM/SifYnabcQrI/AAAAAAAAAXI/ClWB5VrJNuQ/s400/cpplands1.png" alt="" /></p>
<p>O post original do mapa pode ser encontrado clicando-se <a href="http://alenacpp.blogspot.com/2009/06/c.html#cpplandsenglish" target="_blank">aqui</a>, inclusive contem opções de tamanho.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bcsanches.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bcsanches.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bcsanches.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bcsanches.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bcsanches.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bcsanches.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bcsanches.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bcsanches.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bcsanches.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bcsanches.wordpress.com/250/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bcsanches.wordpress.com&blog=3563426&post=250&subd=bcsanches&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bcsanches.wordpress.com/2009/06/15/mapa-do-c/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/47c683ae448001e8b767f74210aa3fd8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bcsanches</media:title>
		</media:content>

		<media:content url="http://3.bp.blogspot.com/_VUQ3DQEhjsM/SifYnabcQrI/AAAAAAAAAXI/ClWB5VrJNuQ/s400/cpplands1.png" medium="image" />
	</item>
		<item>
		<title>Compilando a Boost no Visual &#8211; 2009</title>
		<link>http://bcsanches.wordpress.com/2009/06/03/compilando-a-boost-no-visual-2009/</link>
		<comments>http://bcsanches.wordpress.com/2009/06/03/compilando-a-boost-no-visual-2009/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 15:31:02 +0000</pubDate>
		<dc:creator>bcsanches</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://bcsanches.wordpress.com/?p=232</guid>
		<description><![CDATA[O primeiro post do blog foi exatamente este, e não querendo já parecer sessão da tarde e começar a repetir tudo de novo estou re-fazendo o post.
O post original é bem incompleto em vários aspectos, e ao invés de atualizar ele decidi fazer um completamente novo aproveitando que estou configurando uma maquina de build.
Outra vantagem [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bcsanches.wordpress.com&blog=3563426&post=232&subd=bcsanches&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>O primeiro post do blog foi exatamente este, e não querendo já parecer sessão da tarde e começar a repetir tudo de novo estou re-fazendo o post.</p>
<p>O post original é bem incompleto em vários aspectos, e ao invés de atualizar ele decidi fazer um completamente novo aproveitando que estou configurando uma maquina de build.</p>
<p>Outra vantagem deste artigo é que indo direto a seção “Configurando o Visual”, as informações ali contidas servem para a maioria das bibliotecas de C/C++.</p>
<h3>Baixando a Boost</h3>
<p>Esta é a etapa mais simples de todas, basta acessar o site <a href="http://www.boost.org" target="_blank">oficial,</a> e clicar no link “Download” do lado direito da tela. A versão 1.39.0 (a ultima lançada até o dia que esse artigo foi publicado) pode ser baixada clicando <a href="http://sourceforge.net/project/showfiles.php?group_id=7586&amp;package_id=8041&amp;release_id=679861" target="_blank">aqui</a>.</p>
<p>No meu caso utilizo a versão zip do pacote, mas todos os outros pacotes acredito que possuam o mesmo conteúdo.</p>
<p>Após o download extraia o conteúdo dos arquivos para o diretório de bibliotecas que você costuma utilizar, no meu caso c:\develop\libs.</p>
<p>Depois de extrair os arquivos é necessário baixar o <a href="http://www.boost.org/doc/tools/jam/index.html" target="_blank">bjam</a>, que é a ferramenta de compilação da Boost, a ultima versão pode ser encontrada clicando <a href="http://sourceforge.net/project/showfiles.php?group_id=7586&amp;package_id=72941&amp;release_id=643622" target="_blank">aqui</a>.</p>
<p>Após concluído o download do bjam extraia o arquivo exe para o mesmo diretório em que a Boost foi colocada  (no meu caso C:\develop\libs\boost_1_39_0).</p>
<h3>Compilando</h3>
<p>Agora com as ferramentas prontas é necessário rodar o bjam, para tal acesse o console do Visual Studio (não o console padrão do Windows) clicando em “Iniciar” –&gt; Todos os programas –&gt; Microsoft Visual Studio –&gt; Visual Studio Tools –&gt; Visual Studio 2008 Command Prompt.</p>
<p>Com o console aberto abra o diretório da Boost (no meu caso digito: cd \develop\libs\boost_1_39_0). Dentro do diretório da boost digite “bjam” e ENTER.</p>
<p>Agora como já diz o programa, paciência…</p>
<p>Se tudo correu bem, muitos minutos depois a compilação deve estar completa, as vezes aparecem alguns warnings, que eu simplesmente ignoro.</p>
<h3>Configurando o Visual</h3>
<p>O jeito mais pratico de configurar o visual na minha opinião é criando uma variável de ambiente que contenha o diretório da Boost, fica mais pratico na hora de atualizar as versões (se não quiser criar a variável, basta ir para o próximo paragrafo), então primeiramente clique em “Iniciar” –&gt; Botão direito em “Meu Computador” –&gt; Propriedades.  Na janela que se abrir, clique em “Avançado”, depois no botão “Variáveis de Ambiente”. Na caixa “Variáveis do Sistema”, clique em “Novo”. Agora entre com o nome (ex: BOOST_HOME), e o valor, que é o diretório onde a boost foi instalada (c:\develop\libs\boost_1_39_0 no meu caso), agora é ir clicando em Ok até fechar tudo.</p>
<p>O próximo passo é abrir o visual (se o seu visual já estava aberto e você criou a variável, feche ele e abra novamente). Dentro do visual acesse “Tools” –&gt; “Options”, expanda a linha “Projects and Solutions” –&gt; “VC++ Directories”.</p>
<p>Com a janela de configuração de diretórios podemos configurar os diretórios utilizados pelo visual durante builds, o primeiro a ser configurado é o de include (a ordem não importa aqui), então do lado direito, na caixa de seleção “Show directories for”, selecione “Include Files”. Basta clicar na primeira linha vazia após o ultimo item e entrar com o diretório, que no meu caso foi: $(BOOST_HOME). Caso eu não tivesse criado a variável, o valor teria sido: c:\develop\libs\boost_1_39_0.</p>
<p><a href="http://bcsanches.files.wordpress.com/2009/06/visual_boost_01.jpg"><img style="display:inline;border-width:0;" title="Configurando diretórios de include" src="http://bcsanches.files.wordpress.com/2009/06/visual_boost_01_thumb.jpg?w=425&#038;h=250" border="0" alt="Configurando diretórios de include" width="425" height="250" /></a></p>
<p>Por fim é necessário configurar o diretório de bibliotecas selecionando “Libraries Files” na caixa “Show Directories for” e entrando com o diretório das libs, que no meu caso foi: $(BOOST_HOME)\stage\lib, se não estiver usando a variável, basta então: c:\develop\libs\boost_1_39_0\stage\lib, note que o diretório varia de acordo com o diretório que foi usado na instalação, mas o principal é o sub-diretório “stage\lib”.</p>
<p><a href="http://bcsanches.files.wordpress.com/2009/06/visual_boost_02.jpg"><img style="display:inline;border-width:0;" title="visual_boost_02" src="http://bcsanches.files.wordpress.com/2009/06/visual_boost_02_thumb.jpg?w=440&#038;h=258" border="0" alt="visual_boost_02" width="440" height="258" /></a></p>
<p>Tendo inserido os diretórios, clique em Ok para salvar.</p>
<h3>Testando a Instalação</h3>
<p>Para testar a instalação crie um novo projeto no Visual (se não sabe como fazer, clique <a href="http://bcsanches.wordpress.com/2009/03/06/como-utilizar-o-visual-studio-c-parte-1/">aqui</a>) e use um código exemplo da Boost, eu utilizei o código abaixo:</p>
<pre class="brush: cpp;">

#include&lt;boost/filesystem/operations.hpp&gt;
#include&lt;iostream&gt;

namespace bf = boost::filesystem;
int main(int, char **)
{
    bf::path p(&quot;first.cpp&quot;);
    if(bf::exists(p))
        std::cout&lt;&lt;p.leaf()&lt;&lt;&quot;exists.\n&quot;;
    else
        std::cout&lt;&lt;p.leaf()&lt;&lt; &quot;does not exist.\n&quot;;

    return 0;
}
</pre>
<p>O código compilou sem problemas aqui e executou perfeitamente, sendo assim, instalação concluída.</p>
<p>Note que a Boost automaticamente já linka o código com as bibliotecas necessárias, com algumas bibliotecas é necessário configurar o arquivo lib a ser usado, mas isso fica para outro post.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bcsanches.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bcsanches.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bcsanches.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bcsanches.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bcsanches.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bcsanches.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bcsanches.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bcsanches.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bcsanches.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bcsanches.wordpress.com/232/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bcsanches.wordpress.com&blog=3563426&post=232&subd=bcsanches&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bcsanches.wordpress.com/2009/06/03/compilando-a-boost-no-visual-2009/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/47c683ae448001e8b767f74210aa3fd8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bcsanches</media:title>
		</media:content>

		<media:content url="http://bcsanches.files.wordpress.com/2009/06/visual_boost_01_thumb.jpg" medium="image">
			<media:title type="html">Configurando diretórios de include</media:title>
		</media:content>

		<media:content url="http://bcsanches.files.wordpress.com/2009/06/visual_boost_02_thumb.jpg" medium="image">
			<media:title type="html">visual_boost_02</media:title>
		</media:content>
	</item>
		<item>
		<title>Boost 1.39.0</title>
		<link>http://bcsanches.wordpress.com/2009/05/04/boost-1390/</link>
		<comments>http://bcsanches.wordpress.com/2009/05/04/boost-1390/#comments</comments>
		<pubDate>Mon, 04 May 2009 15:01:33 +0000</pubDate>
		<dc:creator>bcsanches</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[noticias]]></category>

		<guid isPermaLink="false">http://bcsanches.wordpress.com/?p=224</guid>
		<description><![CDATA[Foi lançada a mais nova versão da Boost, desta vez inclui apenas uma lib nova, a Signals2, que é uma implementação de um sistema de sinais e slot, na verdade essa lib é uma implementação thread safe da Signals já existente. Além desta lib nova foram feitas diversas correções e melhoramentos nas libs existentes, maiores [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bcsanches.wordpress.com&blog=3563426&post=224&subd=bcsanches&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Foi lançada a mais nova versão da <a href="http://www.boost.org/">Boost</a>, desta vez inclui apenas uma lib nova, a <a href="http://www.boost.org/doc/libs/1_39_0/doc/html/signals2.html">Signals2</a>, que é uma implementação de um sistema de sinais e slot, na verdade essa lib é uma implementação thread safe da <a href="http://www.boost.org/doc/libs/1_39_0/doc/html/signals.html" target="_blank">Signals</a> já existente. Além desta lib nova foram feitas diversas correções e melhoramentos nas libs existentes, maiores detalhes no <a href="http://www.boost.org/users/download/version_1_39_0">release notes</a>.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bcsanches.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bcsanches.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bcsanches.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bcsanches.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bcsanches.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bcsanches.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bcsanches.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bcsanches.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bcsanches.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bcsanches.wordpress.com/224/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bcsanches.wordpress.com&blog=3563426&post=224&subd=bcsanches&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bcsanches.wordpress.com/2009/05/04/boost-1390/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/47c683ae448001e8b767f74210aa3fd8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bcsanches</media:title>
		</media:content>
	</item>
		<item>
		<title>Como Utilizar o Visual Studio C++ – Parte 3</title>
		<link>http://bcsanches.wordpress.com/2009/04/22/como-utilizar-o-visual-studio-parte-3/</link>
		<comments>http://bcsanches.wordpress.com/2009/04/22/como-utilizar-o-visual-studio-parte-3/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 15:57:58 +0000</pubDate>
		<dc:creator>bcsanches</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://bcsanches.wordpress.com/?p=213</guid>
		<description><![CDATA[No artigo anterior vimos de maneira mais detalhada como realizar um build no Visual e diversas configurações, agora vamos expandir um pouco mais nosso ambiente instalando a Windows SDK, que consiste num kit de desenvolvimento para aplicações Windows.
Pode ser que seu projeto não precise utilizar a API do Windows diretamente, mas outras libs podem precisar [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bcsanches.wordpress.com&blog=3563426&post=213&subd=bcsanches&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>No <a href="http://bcsanches.wordpress.com/2009/04/01/como-utilizar-o-visual-studio-c-parte-2/">artigo anterior</a> vimos de maneira mais detalhada como realizar um build no Visual e diversas configurações, agora vamos expandir um pouco mais nosso ambiente instalando a <a href="http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx" target="_blank">Windows SDK</a>, que consiste num kit de desenvolvimento para aplicações Windows.</p>
<p>Pode ser que seu projeto não precise utilizar a API do Windows diretamente, mas outras libs podem precisar (<a href="http://www.boost.org/" target="_blank">Boost</a> por exemplo).</p>
<h3>Baixando a SDK</h3>
<p>Para baixar a SDK basta acessar o link de download: Windows <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=E6E1C3DF-A74F-4207-8586-711EBE331CDC&amp;displaylang=en" target="_blank">SDK for Windows Server 2008 and .NET Framework 3.5</a>, para baixar uma imagem de DVD ISO com toda a SDK, use esse <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=F26B1AA4-741A-433A-9BE5-FA919850BDBF&amp;displaylang=en" target="_blank">link</a>.</p>
<p>No meu caso optei por instalar a versão web, pois como não utilizo todos os componentes não preciso fazer todo o download.</p>
<p>Após o donwload do programa setup, basta rodar ele. Surge então a primeira tela do setup, clicando em next ele pergunta sobre os diretórios de destino (no meu caso, uso o valor padrão).</p>
<p>Em seguida o instalador pergunta sobre os componentes a instalar, no meu caso dispenso qualquer coisa relacionada a desenvolvimento 64 bits (minhas maquinas são todas 32 bits), dispenso também os samples (exemplos) e documentação (que pode ser vista online), minha configuração ficou:</p>
<p><a href="http://bcsanches.files.wordpress.com/2009/04/visual-p3-setup-sdk-02.jpg"><img style="display:inline;border-width:0;" title="visual_p3_setup_sdk_02" src="http://bcsanches.files.wordpress.com/2009/04/visual-p3-setup-sdk-02-thumb.jpg?w=388&#038;h=397" border="0" alt="visual_p3_setup_sdk_02" width="388" height="397" /></a></p>
<p>As seleções aqui são um tanto pessoais e dependem do que você pretende fazer, mas o principal a instalar são os componentes do Windows Headers and Libraries, incluindo no minimo os “Header Files” e alguma das “Libraries”. Lembre-se que se for incluído apenas as bibliotecas para CPU 64 bits, será possível apenas compilar código para essa arquitetura.</p>
<p>Clicando em “next”, o instalador vai iniciar o download e a instalação logo após a conclusão deste.</p>
<p>A instalação é bem básica, e apos a conclusão basta clicar em “Finish”.</p>
<h3>Testando a Instalação</h3>
<p>Se tudo correu bem, agora basta pegar o programa “Hello World” do <a href="http://bcsanches.wordpress.com/2009/03/06/como-utilizar-o-visual-studio-c-parte-1/">primeiro artigo</a> da série e modifica-lo:</p>
<pre class="brush: cpp;">
#include &lt;windows.h&gt;

int main(int argc, char **argv)
{
    MessageBox(NULL, L&quot;Ola Windows!&quot;, L&quot;Teste&quot;, MB_OK);
    return 0;
}
</pre>
<p>Agora é compilar e executar o programa, durante a execução deve ser surgir uma dialogo com a mensagem definida acima.</p>
<p>No próximo post vou aproveitar e atualizar o artigo de compilação da Boost, que esta incompleto e desatualizado.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bcsanches.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bcsanches.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bcsanches.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bcsanches.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bcsanches.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bcsanches.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bcsanches.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bcsanches.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bcsanches.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bcsanches.wordpress.com/213/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bcsanches.wordpress.com&blog=3563426&post=213&subd=bcsanches&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bcsanches.wordpress.com/2009/04/22/como-utilizar-o-visual-studio-parte-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/47c683ae448001e8b767f74210aa3fd8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bcsanches</media:title>
		</media:content>

		<media:content url="http://bcsanches.files.wordpress.com/2009/04/visual-p3-setup-sdk-02-thumb.jpg" medium="image">
			<media:title type="html">visual_p3_setup_sdk_02</media:title>
		</media:content>
	</item>
		<item>
		<title>Como Utilizar o Visual Studio C++ – Parte 2</title>
		<link>http://bcsanches.wordpress.com/2009/04/01/como-utilizar-o-visual-studio-c-parte-2/</link>
		<comments>http://bcsanches.wordpress.com/2009/04/01/como-utilizar-o-visual-studio-c-parte-2/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 11:00:57 +0000</pubDate>
		<dc:creator>bcsanches</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://bcsanches.wordpress.com/?p=185</guid>
		<description><![CDATA[No artigo anterior vimos como instalar e como criar um programa de teste no visual, agora vamos nos aprofundar um pouco mais no sistema de build do visual.
Configurações de Build
O visual por padrão possui duas configurações de build, a debug e a release. Cada versão permite que o usuário configure o compilador de maneiras totalmente [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bcsanches.wordpress.com&blog=3563426&post=185&subd=bcsanches&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>No <a href="http://bcsanches.wordpress.com/2009/03/06/como-utilizar-o-visual-studio-c-parte-1/">artigo anterior</a> vimos como instalar e como criar um programa de teste no visual, agora vamos nos aprofundar um pouco mais no sistema de build do visual.</p>
<h3>Configurações de Build</h3>
<p>O visual por padrão possui duas configurações de build, a debug e a release. Cada versão permite que o usuário configure o compilador de maneiras totalmente diferentes, além de ser possível criar quantas configurações forem necessárias.</p>
<p>Estas configurações são uteis para permitir, por exemplo, desabilitar qualquer otimização do compilador e facilitar a depuração de código (fato que já ocorre na configuração Debug gerada quando um projeto é criado), sendo assim, a versão debug é geralmente usada apenas pelos desenvolvedores.</p>
<p>Já a versão release liga as otimizações do compilador e (geralmente) desliga a geração de informações de debug, sendo esta usada para se realizar um build quando queremos enviar o software ao usuário final.</p>
<p>A configuração atual pode ser visualizada no topo da janela do visual, próximo as opções de menu:</p>
<p><a href="http://bcsanches.files.wordpress.com/2009/03/visual-p2-configmenu-02.jpg"><img style="display:inline;border-width:0;" title="Caixa de seleção de configurações." src="http://bcsanches.files.wordpress.com/2009/03/visual-p2-configmenu-02-thumb.jpg?w=357&#038;h=97" border="0" alt="Caixa de seleção de configurações." width="357" height="97" /></a></p>
<p>Na figura acima vemos que a configuração ativa é a Debug, clicando na caixa de seleção é possível alterar a configuração a ser usada no próximo build.</p>
<p>Além das configurações de build, é possível especificar uma plataforma para cada configuração, como por exemplo Win32 e Win64, como nunca trabalhei com desenvolvimento multi-plataforma no visual (nos projetos multi-plataforma que trabalhei usávamos uma IDE para cada ambiente) não vou me aprofundar nesse item.</p>
<h3>Opções do Menu Build</h3>
<p>Na figura abaixo podemos ver as opções do menu build do visual, que são descritas a seguir:</p>
<p><a href="http://bcsanches.files.wordpress.com/2009/04/visual-p2-buildmenu-01.jpg"><img style="display:inline;border-width:0;" title="Menu de build do visual" src="http://bcsanches.files.wordpress.com/2009/04/visual-p2-buildmenu-01-thumb.jpg?w=245&#038;h=282" border="0" alt="Menu de build do visual" width="245" height="282" /></a></p>
<p>Vemos que o menu de build é divido em quatro seções, sendo estas:</p>
<ol>
<li>Solução (solution): comandos que afetam toda a solução.</li>
<li>Projeto: os comandos aqui afetam apenas o projeto e suas dependências.</li>
<li>Lote (Batch): comandos que afetam múltiplas configurações.</li>
<li>Compilar: este compila apenas o arquivo sendo editado.</li>
</ol>
<p>Note que os comandos de compilação são basicamente:</p>
<ul>
<li>Build: este comando compila apenas os arquivos alterados e as dependências afetadas por estes.</li>
<li>Rebuild: este comando apaga todos os arquivos gerados, forçando uma rê-compilação completa.</li>
<li>Clean: apenas apaga os arquivos gerados.</li>
</ul>
<p>Detalhe que os comandos relacionados ao projeto não afetam unicamente o projeto sendo editado, podem afetar as suas dependências, se existirem múltiplos projetos dentro de uma solução, os comandos da seção projeto vão afetar as dependências também, para aplicar o comando apenas ao projeto selecionado, escolha as opções do item “<em>Project Only”</em>. Veremos o uso de dependências em mais detalhes no próximo post.</p>
<h3>Opções de Runtime</h3>
<p>O runtime (no caso do visual) é a forma como seu projeto é associado a biblioteca padrão do C ou C++ (a libc), que no caso do visual pode ser uma dll, as famosas MSVC???.lib, onde ??? varia de acordo com a versão e tipo de build, ou então, uma lib que é linkada diretamente com seu projeto.</p>
<p>Mas para que especificar uma biblioteca C/C++, não deveriam ser iguais? Sim, deveriam, mas a Microsoft disponibiliza dois tipos básicos, uma versão debug e outra versão release.</p>
<p>A versão debug da libc gera informações extras de depuração que veremos em detalhes no post sobre como usar o depurador do visual, já a versão release não possui essas informações e é construída com todas as otimizações possíveis.</p>
<p>Além da versão debug e release, existem para cada uma delas a versão DLL e não DLL. A diferença entre elas é que na versão DLL, seu código é linkado com a MSVC???.dll, na versão não dll (estática), o seu código é linkado diretamente com o arquivo lib não precisando da dll para ser executado.</p>
<p>Para configurar o runtime sendo usado basta clicar com o botão direito do mouse sobre um projeto, e escolher “<em>Properties</em>”:</p>
<p><a href="http://bcsanches.files.wordpress.com/2009/04/visual-p2-configmenu-03.jpg"><img style="display:inline;border-width:0;" title="menu de um projeto" src="http://bcsanches.files.wordpress.com/2009/04/visual-p2-configmenu-03-thumb.jpg?w=210&#038;h=388" border="0" alt="menu de um projeto" width="210" height="388" /></a></p>
<p>Na janela que abrir, basta expandir a “<em>Configuration Properties”</em>, depois o item “<em>C/C++</em>”, e clicar em “<em>Code Generation”, do lado deve surgir então o item “Runtime Library”, como na figura abaixo:</em></p>
<p><a href="http://bcsanches.files.wordpress.com/2009/04/visual-p2-configmenu-04.jpg"><img style="display:inline;border-width:0;" title="Propriedades de um projeto" src="http://bcsanches.files.wordpress.com/2009/04/visual-p2-configmenu-04-thumb.jpg?w=398&#038;h=278" border="0" alt="Propriedades de um projeto" width="398" height="278" /></a></p>
<p>As opções são:</p>
<ul>
<li>Multi-threaded (/MT): versão release multi thread, essa é a versão para linkagem estática.</li>
<li>Multi-threaded Debug (/MTd): mesma anterior, mas versão debug.</li>
<li>Multi-threaded DLL (/MD): versão release multi thread, mas para linkagem dinâmica.</li>
<li>Multi-threaded Debug DLL (/MDd): mesma da anterior, mas versão debug.</li>
<li>inherit from project defaults: este simplesmente usa a configuração de um projeto pai (nesse caso a solução) ou configuração padrão.</li>
</ul>
<p>Detalhe que todas as libs são especificadas como multi-threaded, isso indica que elas podem ser usadas com código multi-thread (antigamente existia também a opção single thread).</p>
<p>Um detalhe que pode passar despercebido sobre a janela de propriedades é que existe uma versão para cada configuração, a configuração sendo utilizada fica no canto superior esquerdo da janela de configurações.</p>
<h3>Escolhendo o Runtime</h3>
<p>A escolha do runtime depende muito do tipo de projeto, e a decisão se baseia entre versão DLL ou não DLL, sendo debug e release escolhidos de acordo com o tipo de build.</p>
<p>A versão DLL é recomendada se seu projeto utiliza dlls, isso é necessário porque se o seu projeto usar a versão não dll da libc, cada dll e o exe do seu programa vão ter sua própria <a href="http://en.wikipedia.org/wiki/Dynamic_memory_allocation" target="_blank">heap</a>. Como cada módulo possui sua própria heap, a memória alocada em um módulo (dll ou exe), utilizando new ou malloc, tem quer ser liberada apenas no mesmo módulo, a estrutura do programa fica como no exemplo abaixo:</p>
<p><a href="http://bcsanches.files.wordpress.com/2009/04/visual-p2-configmenu-07.jpg"><img style="display:inline;border-width:0;" title="suposto programa usando libc com linkagem estatica" src="http://bcsanches.files.wordpress.com/2009/04/visual-p2-configmenu-07-thumb.jpg?w=418&#038;h=114" border="0" alt="suposto programa usando libc com linkagem estatica" width="418" height="114" /></a></p>
<p>Já o mesmo programa utilizando a versão da libc para dlls, fica com a estrutura como na figura abaixo:</p>
<p><a href="http://bcsanches.files.wordpress.com/2009/04/visual-p2-configmenu-08.jpg"><img style="display:inline;border-width:0;" title="o mesmo programa usando libc com linkagem dinâmica (dll)" src="http://bcsanches.files.wordpress.com/2009/04/visual-p2-configmenu-08-thumb.jpg?w=425&#038;h=127" border="0" alt="o mesmo programa usando libc com linkagem dinâmica (dll)" width="425" height="127" /></a></p>
<p>Sendo assim, se seu projeto utiliza dlls, é recomendável linkar ele apenas com a versão dll da libc.</p>
<h3>Arquivos Gerados no Build</h3>
<p>Na configuração padrão de projetos do visual, ele cria duas sub-pastas uma para os builds de debug, e outra para release:</p>
<p><a href="http://bcsanches.files.wordpress.com/2009/04/visual-p2-configmenu-05.jpg"><img style="display:inline;border-width:0;" title="Estrutura de diretórios de uma solução" src="http://bcsanches.files.wordpress.com/2009/04/visual-p2-configmenu-05-thumb.jpg?w=157&#038;h=74" border="0" alt="Estrutura de diretórios de uma solução" width="157" height="74" /></a></p>
<p>Nestas duas pastas são colocados os arquivos gerados durante o build, no caso do build de release do meu programa de testes:</p>
<p><a href="http://bcsanches.files.wordpress.com/2009/04/visual-p2-configmenu-06.jpg"><img style="display:inline;border-width:0;" title="Arquivos gerados pelo build" src="http://bcsanches.files.wordpress.com/2009/04/visual-p2-configmenu-06-thumb.jpg?w=227&#038;h=166" border="0" alt="Arquivos gerados pelo build" width="227" height="166" /></a></p>
<p>Exceto por hello.exe, todos os outros arquivos são utilizados apenas pelo visual durante um build. Isso significa que para enviar esse programa para alguem basta enviar o arquivo exe gerado, que é suficiente para este programa funcionar.</p>
<p>Outro detalhe que como o conteúdo destas pastas é todo gerado pelo visual, removendo qualquer um ou todos os arquivos não causa problema algum, basta executar o build que o visual os gera novamente.</p>
<p>O visual permite modificar a pasta usada para armazenar os arquivos gerados e a maneira mais simples consiste em acessar as propriedades do projeto (clicando com o botão direito sobre o projeto no <em>Solution Explorer</em>, e clicando em “<em>Properties</em>”), na janela que abrir, selecione a opção <em>General</em>, que fica dentro de “<em>Configuration Properties”</em>, deve surgir então a opção “<em>Output Directory”,</em> que indica o diretório usado:</p>
<p><a href="http://bcsanches.files.wordpress.com/2009/04/visual-p2-configmenu-09.jpg"><img style="display:inline;border-width:0;" title="Propriedades do projeto, alterando diretórios de saída" src="http://bcsanches.files.wordpress.com/2009/04/visual-p2-configmenu-09-thumb.jpg?w=414&#038;h=290" border="0" alt="Propriedades do projeto, alterando diretórios de saída" width="414" height="290" /></a></p>
<p>O caminho padrão é um pouco estranho, pois consiste de: $(SolutionDir)$(ConfigurationName). Isso na verdade são duas variáveis de ambiente criadas pelo visual, sendo que $(SolutionDir) e $(ConfigurationName) contém respectivamente o diretório da solução e o diretório da configuração sendo usada. Pode-se por exemplo modificar para: $(SolutionDir)\bin, com esta alteração o arquivo exe vai ser ser gerados no diretório bin.</p>
<p>Alterando o valor da opção “<em>Intermediate Directory”</em> modifica o diretório de destino dos arquivos temporários (como arquivos obj).</p>
<p>No <a href="http://bcsanches.wordpress.com/2009/04/22/como-utilizar-o-visual-studio-parte-3/">próximo post</a>, vamos ver como instalar a Windows SDK no visual.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bcsanches.wordpress.com/185/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bcsanches.wordpress.com/185/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bcsanches.wordpress.com/185/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bcsanches.wordpress.com/185/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bcsanches.wordpress.com/185/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bcsanches.wordpress.com/185/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bcsanches.wordpress.com/185/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bcsanches.wordpress.com/185/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bcsanches.wordpress.com/185/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bcsanches.wordpress.com/185/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bcsanches.wordpress.com&blog=3563426&post=185&subd=bcsanches&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bcsanches.wordpress.com/2009/04/01/como-utilizar-o-visual-studio-c-parte-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/47c683ae448001e8b767f74210aa3fd8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bcsanches</media:title>
		</media:content>

		<media:content url="http://bcsanches.files.wordpress.com/2009/03/visual-p2-configmenu-02-thumb.jpg" medium="image">
			<media:title type="html">Caixa de seleção de configurações.</media:title>
		</media:content>

		<media:content url="http://bcsanches.files.wordpress.com/2009/04/visual-p2-buildmenu-01-thumb.jpg" medium="image">
			<media:title type="html">Menu de build do visual</media:title>
		</media:content>

		<media:content url="http://bcsanches.files.wordpress.com/2009/04/visual-p2-configmenu-03-thumb.jpg" medium="image">
			<media:title type="html">menu de um projeto</media:title>
		</media:content>

		<media:content url="http://bcsanches.files.wordpress.com/2009/04/visual-p2-configmenu-04-thumb.jpg" medium="image">
			<media:title type="html">Propriedades de um projeto</media:title>
		</media:content>

		<media:content url="http://bcsanches.files.wordpress.com/2009/04/visual-p2-configmenu-07-thumb.jpg" medium="image">
			<media:title type="html">suposto programa usando libc com linkagem estatica</media:title>
		</media:content>

		<media:content url="http://bcsanches.files.wordpress.com/2009/04/visual-p2-configmenu-08-thumb.jpg" medium="image">
			<media:title type="html">o mesmo programa usando libc com linkagem dinâmica (dll)</media:title>
		</media:content>

		<media:content url="http://bcsanches.files.wordpress.com/2009/04/visual-p2-configmenu-05-thumb.jpg" medium="image">
			<media:title type="html">Estrutura de diretórios de uma solução</media:title>
		</media:content>

		<media:content url="http://bcsanches.files.wordpress.com/2009/04/visual-p2-configmenu-06-thumb.jpg" medium="image">
			<media:title type="html">Arquivos gerados pelo build</media:title>
		</media:content>

		<media:content url="http://bcsanches.files.wordpress.com/2009/04/visual-p2-configmenu-09-thumb.jpg" medium="image">
			<media:title type="html">Propriedades do projeto, alterando diretórios de saída</media:title>
		</media:content>
	</item>
		<item>
		<title>Como utilizar o Visual C++ &#8211; Parte 1</title>
		<link>http://bcsanches.wordpress.com/2009/03/06/como-utilizar-o-visual-studio-c-parte-1/</link>
		<comments>http://bcsanches.wordpress.com/2009/03/06/como-utilizar-o-visual-studio-c-parte-1/#comments</comments>
		<pubDate>Fri, 06 Mar 2009 15:11:23 +0000</pubDate>
		<dc:creator>bcsanches</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://bcsanches.wordpress.com/?p=163</guid>
		<description><![CDATA[O Visual Studio é um pacote de programas da Microsoft para desenvolvimento de software, suportando diversas linguagens como C#, C++, C, Java, Visual Basic, etc. Nesta série de artigos vou focar apenas no Visual C++ Express 2008, mas a maioria da dicas / comandos devem funcionar em outras versões do Visual C++.
As versões express do [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bcsanches.wordpress.com&blog=3563426&post=163&subd=bcsanches&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>O <a href="http://www.microsoft.com/visualstudio/en-us/default.mspx" target="_blank">Visual Studio</a> é um pacote de programas da Microsoft para desenvolvimento de software, suportando diversas linguagens como C#, C++, C, Java, Visual Basic, etc. Nesta série de artigos vou focar apenas no <a href="http://www.microsoft.com/express/vc/" target="_blank">Visual C++ Express 2008</a>, mas a maioria da dicas / comandos devem funcionar em outras versões do Visual C++.</p>
<p>As versões express do Visual Studio são versões grátis que a microsoft disponibiliza e obviamente elas não possuem todas as funcionalidades das versões pagas, mas na minha opinião o Visual C++ Express é a melhor ferramenta &#8220;grátis&#8221; para se trabalhar com C++ no Windows.</p>
<h3>Instalando</h3>
<p>O primeiro passo é instalar a ferramenta, e o jeito mais simples é indo ao site oficial: <a href="http://www.microsoft.com/express/vc/" target="_blank">Visual C++ Express</a>. Logo ali no lado direito tem um botão &#8220;Download Now&#8221;, escolha a linguagem (Inglês no meu caso) e clique em <em>Download</em>.</p>
<p>Após concluído o download, execute o programa para inicializar a instalação que a principio é como qualquer outro programa, aceitar licença, instalar algum atalho extra, etc.</p>
<p>A versão atual do instalador pergunta se você quer instalar o Microsoft Silverlight Runtime e o Microsoft SQL Server, nenhum dos dois é necessário, a menos que você queira usar o SQL Server como banco de dados para suas aplicações ou utilizar o Silverlight</p>
<p><a href="http://bcsanches.files.wordpress.com/2009/03/visual-setup-01.jpg"><img style="display:inline;border-width:0;" title="Opcionais do Visual C++ Express" src="http://bcsanches.files.wordpress.com/2009/03/visual-setup-01-thumb.jpg?w=398&#038;h=355" border="0" alt="Opcionais do Visual C++ Express" width="398" height="355" /></a></p>
<p>Após escolher os adicionais, vem a escolha do diretório de instalação, de novo, é a gosto do fregues. Clicando em &#8220;Next&#8221; é iniciado o download. Existe no site da Microsoft imagens de CD para quem quiser instalar em um computador que não tenha acesso a rede.</p>
<h3>Rodando</h3>
<p>Após concluída a instalação, o instalador cria um atalho no menu iniciar, basta então acessar ele e clicar no &#8220;Microsoft Visual C++ Express Edition 2008&#8243;. O Visual vai carregar e você deve ver uma tela parecida com a abaixo:</p>
<p><a href="http://bcsanches.files.wordpress.com/2009/03/visual-setup-021.jpg"><img style="display:inline;border-width:0;" title="Tela inicial do Visual" src="http://bcsanches.files.wordpress.com/2009/03/visual-setup-02-thumb1.jpg?w=406&#038;h=241" border="0" alt="Tela inicial do Visual" width="406" height="241" /></a></p>
<p>A versão express costuma solicitar registro, basta seguir o link do dialogo que surgir, entrar com os dados e depois inserir a chave de registro no visual.</p>
<h3>Criando a primeira Solução (projeto)</h3>
<p>O Visual Studio gerencia o software criado através de soluções, cada solução possui um ou mais projetos, que formam o software ou o conjunto de software sendo criado.</p>
<p>Para criarmos nosso &#8220;Hello Visual&#8221;, clique em &#8220;File&#8221; -&gt; &#8220;New&#8221; -&gt; &#8220;Project&#8221;. Surge então um dialogo parecido com o abaixo:</p>
<p><a href="http://bcsanches.files.wordpress.com/2009/03/visual-setup-031.jpg"><img style="display:inline;border-width:0;" title="Criando novo projeto" src="http://bcsanches.files.wordpress.com/2009/03/visual-setup-03-thumb1.jpg?w=407&#038;h=278" border="0" alt="Criando novo projeto" width="407" height="278" /></a></p>
<p>Clique em Win32, depois selecione &#8220;Win32 Console Application&#8221;. Entre com o nome do projeto, diretório onde ele vai ser criado, e nome da solução (que é opcional), em seguida clique em &#8220;Ok&#8221;.</p>
<p><a href="http://bcsanches.files.wordpress.com/2009/03/visual-setup-041.jpg"><img style="display:inline;border-width:0;" title="Configurando o novo projeto" src="http://bcsanches.files.wordpress.com/2009/03/visual-setup-04-thumb1.jpg?w=426&#038;h=291" border="0" alt="Configurando o novo projeto" width="426" height="291" /></a></p>
<p>Surge então a primeira tela do Application Wizard, clique em &#8220;Next&#8221;, na segunda tela selecione &#8220;Console Application&#8221; e marque a caixa &#8220;Empty Project &#8220;. Dessa forma é criada uma aplicação vazia, e sem o código de &#8220;Hello World&#8221; do visual. Depois de criado, o projeto pode ser modificado para aplicação com janela, dll ou biblioteca.</p>
<p><a href="http://bcsanches.files.wordpress.com/2009/03/visual-setup-051.jpg"><img style="display:block;float:none;margin-left:auto;margin-right:auto;border-width:0;" title="Selecionando o tipo de projeto a ser criado" src="http://bcsanches.files.wordpress.com/2009/03/visual-setup-05-thumb1.jpg?w=421&#038;h=354" border="0" alt="Selecionando o tipo de projeto a ser criado" width="421" height="354" /></a></p>
<p>Agora clique em “Finish” e o projeto vai ser criado.</p>
<p>Após criada a aplicação, deve surgir então o &#8220;Solution Explorer&#8221;, que é uma janela (que costuma ficar do lado esquerdo da tela) com a visão de todos os projetos e arquivos da sua solução.</p>
<p><a href="http://bcsanches.files.wordpress.com/2009/03/visual-setup-06.jpg"><img style="display:inline;border-width:0;" title="Visão do Solution Explorer" src="http://bcsanches.files.wordpress.com/2009/03/visual-setup-06-thumb.jpg?w=394&#038;h=321" border="0" alt="Visão do Solution Explorer" width="394" height="321" /></a></p>
<p>No nosso caso ela vai estar vazia, agora criaremos o primeiro arquivo de código: clique com o botão direito do mouse no nome do projeto (meuPrimeiroProjeto, no exemplo), selecione &#8220;Add&#8221; -&gt; &#8220;New Item&#8221;. Na janela que aparecer, selecione &#8220;C++ File (.cpp)&#8221;, entre com o nome do arquivo e clique em &#8220;Add&#8221;.</p>
<p><a href="http://bcsanches.files.wordpress.com/2009/03/visual-setup-07.jpg"><img style="display:inline;border-width:0;" title="Criando novo arquivo para o projeto" src="http://bcsanches.files.wordpress.com/2009/03/visual-setup-07-thumb.jpg?w=396&#038;h=257" border="0" alt="Criando novo arquivo para o projeto" width="396" height="257" /></a></p>
<p>Vai surgir então um lindo arquivo em branco, repare no &#8220;Solution Explorer&#8221; que o arquivo foi adicionado ao seu projeto, agora basta entrar com o código do &#8220;Hello World&#8221;:</p>
<pre class="brush: cpp;">
#include &lt;stdio.h&gt;
int main(int argc, char **argv)
{
    printf(&quot;Hello Visual&quot;);
    return 0;
}
</pre>
<p>Após entrar com o código, clique na opção &#8220;Build&#8221; (menu principal) e selecione &#8220;Build&#8221;, ou então pressione F7. Na parte de baixo da tela vai surgir a tela de output, que mostra o que o compilador esta fazendo, e no final do processo ela indica se houve algum erro ou não. Se aconteceu algum erro, dando um clique duplo sobre a mensagem de erro foca o mesmo na tela.</p>
<p><a href="http://bcsanches.files.wordpress.com/2009/03/visual-setup-081.jpg"><img style="display:inline;border-width:0;" title="Programa de teste após compilação" src="http://bcsanches.files.wordpress.com/2009/03/visual-setup-08-thumb1.jpg?w=427&#038;h=254" border="0" alt="Programa de teste após compilação" width="427" height="254" /></a></p>
<h3>Rodando o &#8220;Hello World&#8221;</h3>
<p>Agora que o projeto já foi compilado, basta executar ele. No menu principal, selecione &#8220;Debug&#8221; -&gt; &#8220;Start Without Debugging&#8221;, ou pressione &#8220;CTRL + F5&#8243;. Pronto, vai surgir uma janela de console com a saída do seu programa.</p>
<p>No proximo <a href="http://bcsanches.wordpress.com/2009/04/01/como-utilizar-o-visual-studio-c-parte-2/" target="_self">post</a>, vamos aprender um pouco mais sobre o build do visual.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bcsanches.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bcsanches.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bcsanches.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bcsanches.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bcsanches.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bcsanches.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bcsanches.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bcsanches.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bcsanches.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bcsanches.wordpress.com/163/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bcsanches.wordpress.com&blog=3563426&post=163&subd=bcsanches&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bcsanches.wordpress.com/2009/03/06/como-utilizar-o-visual-studio-c-parte-1/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/47c683ae448001e8b767f74210aa3fd8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bcsanches</media:title>
		</media:content>

		<media:content url="http://bcsanches.files.wordpress.com/2009/03/visual-setup-01-thumb.jpg" medium="image">
			<media:title type="html">Opcionais do Visual C++ Express</media:title>
		</media:content>

		<media:content url="http://bcsanches.files.wordpress.com/2009/03/visual-setup-02-thumb1.jpg" medium="image">
			<media:title type="html">Tela inicial do Visual</media:title>
		</media:content>

		<media:content url="http://bcsanches.files.wordpress.com/2009/03/visual-setup-03-thumb1.jpg" medium="image">
			<media:title type="html">Criando novo projeto</media:title>
		</media:content>

		<media:content url="http://bcsanches.files.wordpress.com/2009/03/visual-setup-04-thumb1.jpg" medium="image">
			<media:title type="html">Configurando o novo projeto</media:title>
		</media:content>

		<media:content url="http://bcsanches.files.wordpress.com/2009/03/visual-setup-05-thumb1.jpg" medium="image">
			<media:title type="html">Selecionando o tipo de projeto a ser criado</media:title>
		</media:content>

		<media:content url="http://bcsanches.files.wordpress.com/2009/03/visual-setup-06-thumb.jpg" medium="image">
			<media:title type="html">Visão do Solution Explorer</media:title>
		</media:content>

		<media:content url="http://bcsanches.files.wordpress.com/2009/03/visual-setup-07-thumb.jpg" medium="image">
			<media:title type="html">Criando novo arquivo para o projeto</media:title>
		</media:content>

		<media:content url="http://bcsanches.files.wordpress.com/2009/03/visual-setup-08-thumb1.jpg" medium="image">
			<media:title type="html">Programa de teste após compilação</media:title>
		</media:content>
	</item>
		<item>
		<title>Boost 1.38.0</title>
		<link>http://bcsanches.wordpress.com/2009/02/09/boost-1380/</link>
		<comments>http://bcsanches.wordpress.com/2009/02/09/boost-1380/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 17:00:10 +0000</pubDate>
		<dc:creator>bcsanches</dc:creator>
				<category><![CDATA[noticias]]></category>

		<guid isPermaLink="false">http://bcsanches.wordpress.com/?p=143</guid>
		<description><![CDATA[Foi lançado no ultimo dia 8 a versão 1.38.0 da Boost, que além de inúmeras correções de bugs inclui  três novas bibliotecas:

Flyweight: uma implementação do design pattern Flyweight, este pattern permite o compartilhamento de dados entre objetos e ele gerencia os dados compartilhados.
ScopeExit: permite que seja executado um código qualquer na saída de um escopo, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bcsanches.wordpress.com&blog=3563426&post=143&subd=bcsanches&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Foi lançado no ultimo dia 8 a versão <a href="http://www.boost.org/users/news/version_1_38_0" target="_blank">1.38.0</a> da <a href="http://www.boost.org" target="_blank">Boost</a>, que além de inúmeras correções de bugs inclui  três novas bibliotecas:</p>
<ul>
<li><a href="http://www.boost.org/doc/libs/1_38_0/libs/flyweight/doc/index.html" target="_blank">Flyweight</a>: uma implementação do <a href="http://en.wikipedia.org/wiki/Design_pattern_(computer_science)" target="_blank">design pattern</a> <a href="http://en.wikipedia.org/wiki/Flyweight_pattern" target="_blank">Flyweight</a>, este pattern permite o compartilhamento de dados entre objetos e ele gerencia os dados compartilhados.</li>
<li><a href="http://www.boost.org/doc/libs/1_38_0/libs/scope_exit/doc/html/index.html" target="_blank">ScopeExit</a>: permite que seja executado um código qualquer na saída de um escopo, como por exemplo fechar um socket ou um arquivo. A vantagem é que em muitos casos para se implementar um <a href="http://en.wikipedia.org/wiki/Resource_acquisition_is_initialization" target="_blank">RAII</a> é necessário se criar uma classe para se adicionar o código de liberação do recurso no destrutor, com o ScopeExit isto pode ser feito diretamente em funções ou métodos onde o recurso é utilizado.</li>
<li><a href="http://www.boost.org/doc/libs/1_38_0/libs/utility/swap.html" target="_blank">Swap</a>: uma versão melhorada da <a href="http://www.sgi.com/tech/stl/swap.html" target="_blank">std::swap</a>, que além de suportar os operadores de atribuição e construtor de cópia, faz uso de um método swap ou uma função swap (que tem que ser definida para os tipos envolvidos).</li>
</ul>
<p>Caso tenha dificuldades em compilar esta novar versão, experimente ler o artigo: <a href="http://bcsanches.wordpress.com/2008/05/14/compilando-a-boost-no-windows-usando-visual-studio/" target="_self">Compilando a Boost</a>.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bcsanches.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bcsanches.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bcsanches.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bcsanches.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bcsanches.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bcsanches.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bcsanches.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bcsanches.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bcsanches.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bcsanches.wordpress.com/143/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bcsanches.wordpress.com&blog=3563426&post=143&subd=bcsanches&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bcsanches.wordpress.com/2009/02/09/boost-1380/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/47c683ae448001e8b767f74210aa3fd8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bcsanches</media:title>
		</media:content>
	</item>
	</channel>
</rss>