💻 Exemplos: Capítulo 01: Ecossistema C++20/C++23, Compiladores e Estrutura Sequencial
💻 Exemplos: Capítulo 01: Ecossistema C++20/C++23 e Estrutura Sequencial
Especialização em Sistemas com C++ • Demonstrações Práticas Compiláveis
🎯 Objetivo dos Exemplos
Apresentar a estrutura canônica de um programa moderno em C++20/C++23: inclusão de cabeçalhos da biblioteca padrão (<iostream>, <format>, <version>), verificação de macros de feature-testing, convenções de compilação com flags estritas (-std=c++20 -Wall -Wextra -Wpedantic) e fluxo sequencial de inicialização.
1. Código Fonte Completo (main.cpp)
/**
* @file main.cpp
* @brief Inicialização de runtime de sistemas em C++20/C++23 moderno.
* Demonstra feature testing, saída formatada e padrões determinísticos.
*/
#include <iostream>
#include <string>
#include <version> // C++20 Feature Testing Macros
// Verificação de suporte a std::format (C++20)
#if __has_include(<format>)
#include <format>
#define SUPORTE_FORMAT 1
#else
#define SUPORTE_FORMAT 0
#endif
int main() {
std::cout << "=== RUNTIME DE SISTEMAS C++20/C++23 INICIALIZADO ===" << '\n';
// 1. Detecção da Versão do Padrão C++ pelo Compilador
long versao_padrao = __cplusplus;
std::cout << "Versao macro __cplusplus: " << versao_padrao << '\n';
if (versao_padrao >= 202302L) {
std::cout << "Compilador operando em conformidade com C++23!" << '\n';
} else if (versao_padrao >= 202002L) {
std::cout << "Compilador operando em conformidade com C++20!" << '\n';
} else {
std::cout << "Aviso: Compilador em versao legado (C++17 ou anterior)." << '\n';
}
// 2. Metadados de Inicialização do Processo
const std::string subsistema = "KernelTelemetryEngine";
const unsigned int pid = 18452;
const double clock_ghz = 3.80;
std::cout << "Subsistema: " << subsistema
<< " | PID: " << pid
<< " | Frequencia CPU: " << clock_ghz << " GHz" << '\n';
// 3. Formatação Moderna com std::format (ou fallback tradicional)
#if SUPORTE_FORMAT
std::string relatorio = std::format(
"Status de Inicializacao -> Modulo: {:<20} | Codigo: 0x{:04X} | Alocacao: {:.2f} MB",
subsistema, 0xA1B2, 64.50
);
std::cout << relatorio << '\n';
#else
std::cout << "Modulo: " << subsistema << " | Codigo: 0xA1B2 | Alocacao: 64.50 MB" << '\n';
#endif
std::cout << "==================================================" << '\n';
std::cout << "Pipeline de execucao sequencial finalizado com sucesso." << '\n';
return 0; // Código de saída padrão (POSIX EXIT_SUCCESS)
}
2. Instruções de Compilação e Execução
Compile utilizando qualquer um dos compiladores industriais com suporte a C++20:
# Compilação com GCC (g++)
g++ -std=c++20 -Wall -Wextra -Wpedantic -O2 main.cpp -o app_sistema
./app_sistema
# Compilação com Clang (clang++)
clang++ -std=c++20 -Wall -Wextra -O2 main.cpp -o app_sistema
./app_sistema
# Compilação com MSVC (Developer PowerShell no Windows)
cl /std:c++20 /EHsc /W4 /O2 main.cpp /Fe:app_sistema.exe
.\app_sistema.exe
3. Saída Esperada no Terminal
=== RUNTIME DE SISTEMAS C++20/C++23 INICIALIZADO ===
Versao macro __cplusplus: 202002
Compilador operando em conformidade com C++20!
Subsistema: KernelTelemetryEngine | PID: 18452 | Frequencia CPU: 3.8 GHz
Status de Inicializacao -> Modulo: KernelTelemetryEngine | Codigo: 0xA1B2 | Alocacao: 64.50 MB
==================================================
Pipeline de execucao sequencial finalizado com sucesso.