# Microsoft Visual C++

Microsoft Visual C++ (MSVC) és un compilador per als llenguatges de programació C, C++, C++/CLI i C++/CX de Microsoft. MSVC és programari propietari ; originalment era un producte autònom, però més tard es va convertir en part de Visual Studio i es va posar a disposició tant en forma de programari de prova com de programari gratuït. Disposa d'eines per desenvolupar i depurar codi C++, especialment codi escrit per a l'API de Windows, DirectX i. NET.
Moltes aplicacions requereixen paquets de biblioteques d'execució de Visual C++ redistribuibles per funcionar correctament. Aquests paquets s'instal·len sovint per separat de les aplicacions que admeten, la qual cosa permet que diverses aplicacions utilitzin el paquet amb una sola instal·lació. Aquests paquets redistribuibles i en temps d'execució de Visual C++ s'instal·len principalment per a biblioteques estàndard que utilitzen moltes aplicacions.

## Història

El predecessor de Visual C++ es deia Microsoft C/C++. També hi havia un Microsoft QuickC 2.5 i un Microsoft QuickC per a Windows 1.0. El compilador de Visual C++ encara es coneix com a Microsoft C/C++ i des del llançament de l'actualització 2 de Visual C++ 2015, es troba a la versió 14.0.23918.0.

## Compatibilitat
### ABI

Històricament, l'ABI del compilador Visual C++ ha canviat entre les principals versions del compilador. Aquest és especialment el cas dels contenidors STL, on les mides dels contenidors han variat molt entre les versions del compilador. Per tant, Microsoft recomana no utilitzar interfícies C++ als límits dels mòduls quan es vol habilitar el codi de client compilat amb una versió del compilador diferent. En lloc de C++, Microsoft recomana utilitzar interfícies C o COM, que estan dissenyades per tenir un ABI estable entre les versions del compilador.
Totes les versions de MSVC 14.x tenen un ABI estable, i els binaris construïts amb aquestes versions es poden barrejar d'una manera compatible amb cap endavant, tenint en compte les restriccions següents:
* La versió del conjunt d'eines utilitzada ha de ser igual o superior a la versió del conjunt d'eines més alta utilitzada per crear els binaris enllaçats.
* La versió redistribuible de MSVC ha de ser igual o superior a la versió del conjunt d'eines utilitzada per qualsevol component de l'aplicació.
* Les biblioteques estàtiques o els fitxers d'objectes compilats amb /GL (Optimització del programa sencer) no són compatibles amb les versions binaris i han d'utilitzar exactament el mateix conjunt d'eines.

### Biblioteques en temps d'execució C

Visual C++ s'envia amb diferents versions de biblioteques de temps d'execució de C. Això significa que els usuaris poden compilar el seu codi amb qualsevol de les biblioteques disponibles. Tanmateix, això pot causar alguns problemes quan s'utilitzen components diferents (DLL, EXE) al mateix programa. Un exemple típic és un programa que utilitza diferents biblioteques. L'usuari hauria d'utilitzar el mateix temps d'execució C per a tots els components del programa tret que s'entenguin les implicacions. Microsoft recomana utilitzar la biblioteca d'enllaços dinàmics multiprocés (opció del compilador /MD o /MDd) per evitar possibles problemes.

### POSIX

Tot i que el CRT de Microsoft implementa un gran subconjunt d'interfícies POSIX, el compilador Visual C++ emetrà un avís sobre cada ús d'aquestes funcions de manera predeterminada. La raó és que els estàndards C i C++ requereixen un prefix de guió baix abans de les interfícies definides per la implementació, de manera que l'ús d'aquestes funcions no és estàndard. Tanmateix, els sistemes que en realitat són compatibles amb POSIX no acceptarien aquests noms subratllats, i és més portàtil desactivar l'avís.

### C

Tot i que el producte es va originar com a IDE per al llenguatge de programació C, durant molts anys el suport del compilador per a aquest llenguatge només es va conformar amb l'edició original de l'estàndard C, que data de 1989, però no amb la revisió C99 de l'estàndard. No hi havia hagut plans per donar suport a C99 fins i tot el 2011, més d'una dècada després de la seva publicació.

### C++

Amb la configuració predeterminada, MSVC no fa una cerca de noms en dues fases, cosa que impedeix marcar una àmplia gamma de codis no vàlids. La majoria de comprovacions es difereixen a la instanciació de plantilles. Les versions més recents solucionen aquest comportament, però cal activar-lo mitjançant l'opció de línia d'ordres /permissive-.

## Referències

* ↑ «What Is Microsoft Visual C++ Redistributable & Do You Need So Many?» (en anglès americà), 15-03-2021. [Consulta: 8 desembre 2023].
* ↑ «Compatibility» (en anglès americà). Microsoft: CRT library features, 26-10-2022.
* ↑ «C99 support» (en anglès). Microsoft Connect. Arxivat de l'original el 2016-03-04. [Consulta: 21 setembre 2015].
* ↑ «Two-phase name lookup support comes to MSVC» (en anglès), 11-09-2017.