Como é possível funcionar esse programa em C++? [RESOLVIDO]

1. Como é possível funcionar esse programa em C++? [RESOLVIDO]

Apprentice X
ApprenticeX

(usa FreeBSD)

Enviado em 07/12/2021 - 11:33h

Bom dia a todos

O Exemplo abaixo, não lembro onde aprendi, encontrei hoje em minhas anotações.

Minha dúvida é:
Como isso funciona?
Entendo que x é um Inteiro, como ele pode receber um printf?
E se o main está vazio, quem afinal imprime na tela?
#include <bits/stdc++.h>
int x = printf("Hello World\n");
int main(){}



  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 09/12/2021 - 05:15h

Interessante esse exemplo. Eu sabia que o C++ permitia a execução de código fora de main() para a construção de objetos estáticos (antes de main()) e sua desconstrução (depois de main()), mas eu achava que isso seria apenas para classes, não sabia que valia para tipos nativos.

Mas até que faz sentido: um dos objetivos do C++ sempre foi oferecer maneiras de que tipo definidos pelo usuário (sobretudo classes e estruturas) fossem tão parecidos quanto possível com tipos nativos. Se, por um lado, isso implica, por exemplo, poder usar os operadores da linguagem (tais como +, -, <<, *=, -> etc.) para operar com objetos de classes à semelhança de tipos nativos, faz sentido também levar recursos de objetos para os tipos nativos.

Nunca tinha visto ser usado desse modo. Vivendo e apendendo! Obrigado pelo exemplo.


Quanto ao modo pelo qual isso funciona, a “mágica” é implementada pelo linker, que inclui no código executável correspondente ao seu programa algumas outras partes que executam antes de main() ser invocada e depois que ela retorna. Quando você usa o GCC para gerar o executável final, ele se encarrega de invocar o linker por você, e você geralmente não toma conhecimento desses blocos de códigos que funcionam como prólogos e epílogos do seu próprio programa. Entretanto, se você quiser (ou tiver de) chamar o linker diretamente, precisa incluir tais blocos e na ordem correta, a fim de gerar um executável que realmente funcione.

Você pode ler um pouco a respeito disso nesta seção da documentação do GCC (https://gcc.gnu.org/onlinedocs/gccint/Initialization.html) e nesta postagem do Stack Overflow (https://stackoverflow.com/questions/22160888/what-is-the-difference-between-crtbegin-o-crtbegint-o-a...).


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)





Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts