Comment désactiver le mot clé d’interface sur Visual C ++ Express 2008?

Je comstack un code C hérité ici et il y a beaucoup de variables et de membres de structure nommés “interface”, mais VC2008 express s’en plaint, savez-vous comment le désactiver?

J’ai déjà modifié les parameters pour comstackr le code uniquement en tant que code C, mais cela n’a aucun effet.

Fait une

#define interface QQInterface 

avant votre code (par exemple, dans le fichier d’en-tête), ainsi partout où le mot clé interface est utilisé, les compilateurs voient “QQInterface”, qui n’est pas un mot clé. Si tout le code inclut cette définition, vous ne recevrez pas d’erreurs de compilateur ou de lieur.

Le problème est que MS #defines interface to struct afin que

 interface Name {...} 

peut être utilisé dans le code COM c ++. (objbase.h: 199: #define interface __STRUCT__ )

Juste l’ #undef interface après avoir inclus Windows.h ..

Si vous essayez de comstackr du code C raisonnablement portable, il peut être intéressant de désactiver les extensions de langage Microsoft (/ Za sur la ligne de commande, Propriétés de configuration> C / C ++> Langage dans VS) et voir si le code est compilé à ce moment-là.

“interface” a ne doit pas être un mot clé en C ni ISO C ++. Il s’agit d’ un mot clé dans les extensions managées pour C ++. Par conséquent, vous lui indiquez que, quelque part dans votre configuration, il continue à créer du code pour .NET. Assurez-vous que partout est réglé sur “Code natif”

Cependant, il est fort possible que vous NE puissiez PAS définir le code natif dans l’édition Express.

UPDATE: Ignorez ce dernier paragraphe. MSFT insiste sur le fait que vous pouvez créer des applications Win32 natives avec VisualC ++ Express: http://www.microsoft.com/express/vc/

J’ai rencontré un problème similaire lors de la compilation du code C ++, qui incluait un fichier d’en-tête dbus. Puisque dbus a plusieurs fonctions où il utilise “interface” comme nom de paramètre I / P, qui est un mot clé C ++, j’ai l’erreur suivante: error: expected ',' or '...' before 'struct' .

Quand j’ai essayé ceci:

 #ifdef interface #undef interface #endif 

cela a résolu le problème. Pas sûr si l’utilisation de la liaison dbus C ++ aurait été préférable. Quoi qu’il en soit, je n’utilisais pas dbus, j’avais juste une dépendance à distance sur l’un des en-têtes de dbus, cette solution fonctionnait parfaitement !!