Come risolvere l'errore file sorgente non compilato in Dev-C++

Giorgio Borelli

Dev C++ loadingIl Linguaggio C si sà è un linguaggio compilato e seppur storico e ad oggi poco di moda è ancora diffusissimo, sia che tu lo stia studiando a scuola o lo utilizzi come programmatore per sviluppare magari qualche driver, necessariamente hai bisogno di un editor (IDE) ma soprattutto di un compilatore C affinché il tuo listato sorgente in C possa essere "tradotto" ed eseguito.

Il Dev-C++ è un IDE (Integrated Devlopment Enviroment) molto utilizzato tra gli sviluppatori del Linguaggio C e C++ ed integra al suo interno sia il compilatore C che quello C++, per chi è all'inizio soprattutto, per chi si accinge ad imparare il C ed il C++, per chi lo studia a scuola, potrebbe considerarsi quasi uno standard e infatti ne viene spesso suggerita l'installazione e l'utilizzo da parte di docenti e testi scolastici.

Tutto sembra facile e di immediato approccio, un IDE 'potente' come il Dev C++ scaricabile gratuitamente grazie alla sua licenza free GPL e pronto all'uso con compilatore integrato, eppure dopo l'installazione sin dalla prima compilazione ed esecuzione di un qualsivoglia banale programmino in C riscontriamo un problema di non facile risoluzione al primo approccio, accade infatti che dopo aver compilato correttamente il sorgente scritto in linguaggio C provando ad eseguirlo (run) riceviamo dal Dev-C++ una finestra di warning col messaggio "File sorgente non Compilato".

Cosa mai può essere accaduto? Il momento prima la compilazione era andata a buon fine, e adesso all'atto dell'esecuzione mi ritrovo con questo inspiegabile messaggio di "File non compilato" quando lo eseguo? E' di certo un errore abbastanza strano e difficilmente risolvibile, eppure la soluzione è davvero semplice andiamo a scoprire.

Prosegue...

Categorie: fix | IDE

Tags: , , ,

Come specificare un HttpHandler nel web.config per applicazioni ASP.NET

Giorgio Borelli

Aggiungere gli httphandler alla propria applicazione web in asp.netGli HttpHandlers di ASP.NET consentono di elaborare una risposta a fronte di una qualsivoglia richiesta al web server (IIS). Usare gli HttpHandlers permette di personalizzare la risposta da inviare al client (il browser) non solo per una classica pagina, ma per qualsivoglia risorsa sia stata richiesta, sia questa una immagine un file pdf o un file di risorse .resx ed altro ancora.

Implementarli nella propria applicazione web offre potenzialità enormi, ed il loro uso è relativamente semplice, questi non sono altro che una implementazione dell'interfaccia IHttpHandler, in grado di prendere in carico il processo della richiesta (HttpContext) ed elaborarne una risposta, per questo a fronte di richieste diverse (pagine, risorse, immagini, etc...) è possibile implementare Handlers diversi così da fornire risposte diverse.

Lo scopo di questo articolo non è quello però di descrivere il funzionamento degli HttpHandler, ma tanto quello di vedere come aggiungerli alla nostra applicazione web tramite il web.config, andiamo a scoprire come fare.

Prosegue...

Categorie: ASP.NET

Tags: , , , , , , ,

Formattare un numero in euro con C# e ASP.NET

Giorgio Borelli

simbolo euro e valuta corrente (currency) in ASP.NET e C#La formattazione di un numero, sia esso intero o in virgola nella valuta corrente ed in particolar modo in euro è un'esigenza con la quale presto o tardi qualsiasi sviluppatore asp.net deve confrontarsi, niente di chè intendiamoci, però basta davvero poco per avere una formattazione corretta e fare le cose fatte bene anzichè ricorrere a metodi e simboli ascii che non soddisfano appieno il nostro obbiettivo.

Per scrivere il simbolo dell'euro in ASP.NET e C# ricorreremo al metodo Format della classe String, andiamo a vedere come fare.

Prosegue...

Categorie: ASP.NET | C#

Tags: ,

Boxing e Unboxing

Giorgio Borelli

Cos'è il boxing e unboxing del .NET frameworkIl Common Language Runtime (CLR) del .NET framework è in grado di eseguire applicazioni scritte in uno qualsiasi dei linguaggi supportati dalla piattaforma, quali C# o VB.NET, anche misti fra loro, questo è possibile grazie al Common Type System (CTS), ovvero l'insieme comune e condiviso dei tipi all'interno del framework.

In altre parole, ad esempio, il tipo int di C# ed integer di VB, durante l'esecuzione non sono altro che il tipo comune System.Int32 del framework.NET, tutto questo sempre ammesso che i linguaggi utilizzati soddisfino determinate specifiche (CLS - Common Language Specification) che li rendano compatibili con quelli comuni del framework.

Fatta questa premessa dovuta per avere un quadro più completo dell'argomento, diciamo che tra i tipi comuni del CLR, vi è un tipo generico da cui derivano tutti gli altri, il tipo System.Object, infatti si suole dire che nel .NET framework qualsiasi cosa è un'oggetto, sia questo un tipo intero, booleano o una classe stessa. La possibilità di avere un tipo generico che rappresenti qualsiasi dato all'interno del nostro programma ci consente di usarlo per potergli associare un qualsivoglia oggetto, sia esso un Tipo Valore o Tipo di Riferimento. Ad un primo impatto questo approccio potrebbe risultare molto comodo, uso solo tipi Object, e l'applicazione gira ugualmente, fregandomene della definizione dei tipi e della loro opportuna gestione.

Ma siamo certi che questo approccio sia corretto, purtroppo no, usare un tipo Object generico porta ad un decadimento delle prestazioni dell'applicazione, poichè avvengono le operazioni di Boxing e Unboxing per la conversione dà Tipi Valore a Tipi di Riferimento e viceversa, andiamo quindi a scoprirne di più su cosa avviene nelle operazioni di Boxing e Unboxing.

Prosegue...

Categorie: .NET framework | C#

Tags: ,

Differenze tra Tipi di Valore e Tipi di Riferimento

Giorgio Borelli

Le principali caratteristiche e differenze tra i tipi di valore ed i tipi di riferimento del .NET frameworkI linguaggi supportati dal .NET framework quali C# e VB si dice che sono strongly-typed, ossia fortemente tipizzati, in parole povere ogni variabile od oggetto dichiarato all'interno del programma deve definire un tipo e lo deve rispettare (pena un errore di compilazione).

Pertanto un tipo descrive le caratteristiche dell'informazione che esso dovrà andare a rappresentare all'interno del programma a mezzo di una variabile, sia esso un numero, una sequenza di caratteri od oggetti più complessi come istanze di classi, in ogni caso ogni elemento all'interno di un programma sviluppato col .NET framework deve essere dichiarato a mezzo di un tipo e ne deve rispettare le funzionalità durante l'uso.

I tipi non si differenziano però solo per il dato che rappresentano, ma anche per la gestione che di questi se ne fà in memoria. All'interno del .NET framework, o meglio del CLR (Common Language Runtime) sono definite due categorie di tipi, i Tipi di Valore (Value Types) e Tipi di Riferimento (Value References), l'una e l'altra categoria presenta le proprie caratteristiche e soprattutto ha un diverso metodo di allocazione della memoria, per chi vuole iniziare a programmare in .NET non può prescindere dalla conoscenza di queste nozioni di base relative ai tipi per valore e per riferimento, andiamo a vedere pertanto le principali caratteristiche e differenze.

Prosegue...

Categorie: .NET framework | C# | Programmazione

Tags: ,

Come generare numeri casuali in C#

Giorgio Borelli

Comm generare un numero casuale in C#Nel .net framework non poteva di certo mancare una classe per gestire i numeri random (casuali), questa è la classe System.Random, la quale ci permette di generare numeri casuali interi, double o riempire array di byte. Possiamo specificare anche un valore massimo, o un range di valori nel quale il nostro numero casuale deve ricadere.

Tramite la classe Random generare numeri casuali in C# è davvero un gioco da ragazzi, dobbiamo porre però attenzione a questo argomento, poichè nasconde un'insidia, infatti è bene sapere che la classe Random permette di generare numeri pseudo-casuali, i numeri generati non sono completamente casuali, poiché sono generati da un'algoritmo matematico (algoritmo sottrattivo) che per sua natura stessa non può essere casuale.

La genereazione di un numero casuale avviene partendo da un valore d'inizializzazione, detto seme, scegliendo sempre lo stesso seme si otterrà sempre la stessa sequenza di numeri pseudo-casuali, proprio perchè generati da un'algoritmo matematico. Per ottenere dei numeri veramente casuali è necessario variare il valore del seme in base ad un qualche fattore, molto utile potrebbe essere il fattore tempo, affidandoci magari al clock di sistema.

Andiamo a vedere come usare la classe Random per generare numeri casuali in C#, facendo bene distinzione tra quelli pseudo-casuali e quelli casuali puri.

Prosegue...

Categorie: .NET framework | C#

Tags: ,

Il pattern Singleton in C#

Giorgio Borelli

Il design pattern Singleton in C SharpNell'ambito della programmazione OOP i design patterns non sono altro che delle soluzioni efficaci, testate e funzionanti a problemi comuni. Utilizzare un pattern al momento opportuno si rivela sicuramente una soluzione elegante ed efficace, ed evita di ri-scrivere del codice potenzialmente non ottimizzato o contentente dei bug. Tuttavia i patterns non rappresentano delle regole scritte per una buona programmazione, più che altro forniscono delle linee guida da seguire quando uno sviluppatore deve mettere appunto un determinata soluzione.

I design patterns sono diversi, ed è celebra la loro raccolta nel libro “Design Patterns: Elements of Reusable Object-Oriented Software” ad opera del Gof (Gang of four - la banda dei quattro), quattro esperti programmatori di fama, i quali hanno suddiviso i patterns in tre famiglie: strutturali, creazionali e comportamentali.

Oggi vogliamo prendere in considerazione il pattern Singleton, appartenente ai patterns creazionali, specifici per la creazione d'istanze. Lo scopo del pattern Singleton è quello di permettere per una classe la creazione di una ed una sola istanza con un'unico punto d'accesso (entry-point) all'istanza a livello globale.

Andiamo a scoprire come s'implementa un pattern Singleton in C# e quali caratteristiche e vantaggi comporta.

Prosegue...

Categorie: C# | Programmazione

Tags: ,

Gli Eventi in C Sharp

Giorgio Borelli

Spiegazione degli eventi in C#Sia che parliamo di programmazione per Windows Form o Web Form la gestione degli eventi in C# è un'aspetto fondamentale che ogni buon programmatore deve conoscere.

Il meccanismo degli eventi consente di notificare dei messaggi tra gli oggetti della mia applicazione al verificarsi di determinate condizioni. Allo scatenarsi di un evento è possibile gestirlo opportunamente per effettuare operazioni ed intraprendere azioni per variare il comportamento dell'applicazione come reazione al cambiamento del suo stato.

Un oggetto che genera un'evento, lo notifica ad un'altro che lo prende in carico e lo gestisce (handler dell'evento), tale meccanismo viene implementato per mezzo dei delegates, gli eventi in C# non sono altro che particolari tipi di delegate multicast.

Prosegue...

Categorie: C#

Tags: ,

I Delegate in C Sharp

Giorgio Borelli

Cosa sono e come funzionano i delegate in C#Un delegate in C# viene spesso descritto come un puntatore a funzione (in analogia con il C++), un ulteriore paragone e quello con le interfacce, un delegate (come le interfacce per le classi) specifica la signature (firma) del metodo che successivamente sarà invocato dai metodi degli oggetti che ne rispettano la firma.

Senza nulla togliere alle analogie che sussistono realmente tra i delegate ed i puntatori a funzioni e le interfacce, penso che per chi è alle prime, una tale definizione può generare un pò di confusione, allora come spiegare cos'è un delegate in C#?

Prosegue...

Categorie: C#

Tags: ,

La gestione delle eccezioni in C Sharp

Giorgio Borelli

Come gestire l'eccezioni nel codice C#, con le istruzioni try, catch, finally e throwLa gestione delle eccezioni indipendentemente dal linguaggio usato è un'aspetto fondamentale di ogni buon programma, sia questo un'applicazione web che un programma stand alone.

Per quanto ben progettato, nessun programma è esente da bug, sia il contesto sia gli errori imprevisti possono comportarne un malfunzionamento o peggio un crash, e quest'ultima è proprio l'effetto che vogliamo evitare assolutamente.

Tramite la gestione delle eccezioni è possibile intercettare e gestire in modo opportuno tutti quegli errori, eventi imprevisti e situazioni anomali, consentendo al programma di ripristinarsi ad uno stato normale ed all'utente di riprenderne il normale uso. Un uso accorto della gestione delle eccezioni permette pertanto di scrivere programmi più robusti ed efficaci.

Tratteremo in questo articolo l'uso dei blocchi, delle parole chiavi, del lancio e della personalizzazione delle eccezioni in C#.

Prosegue...

Categorie: C#

Tags: