Какие функции C ++ не совместимы с другими компиляторами, кроме Visual Studio? - PullRequest
1 голос
/ 26 июня 2010

Мне сказали избегать использования таких возможностей C ++, как эти, так как это затрудняет перенос кода на другие компиляторы.

В качестве примера я использовал #ifdef вместо #pragma once в моемзаголовочные файлы.

Ответы [ 4 ]

3 голосов
/ 26 июня 2010

Это не «функции C ++», это нестандартные «расширения», нестандартные функции и « компилятор функции», предоставляемые разработчиком компилятора.

кратко и неполноСписок специфичных для Microsoft функций, которые могут вызвать проблемы при портировании:

  1. Прагма один раз.(и в значительной степени каждая прагма) будет игнорироваться другим компилятором, что приведет к множественным включениям заголовка.Может вызвать проблемы.

  2. __ int32 и аналогичные типы (для Microsoft)
  3. Все, что исходит от windows.h - DWORD / WORD / HANDLE / TCHAR.Также OS-специфичные API и системные вызовы.Это включает в себя WinMain ().
  4. каждый встроенный тип, макросы и ключевые слова, начинающиеся с двух символов подчеркивания (____FUNCTION____, __int32, __declspec и т. Д.).
  5. Определенная версияf функций * printf - swprintf, vswprintfи т. д. Некоторые спецификации формата (% S) ведут себя по-разному на разных компиляторах.
  6. * _ s функций (strcpy_s и т. Д.).
3 голосов
/ 26 июня 2010

Ну, это сложно ответить, потому что каждый компилятор отличается - и, более конкретно, операторы #pragma не являются особенностью C ++.#pragma по определению означает «команду для отправки компилятору»:

«Прагмы по определению зависят от машины или операционной системы и обычно различны для каждого компилятора». MSDN

поэтому, по сути, всякий раз, когда вы видите #pragma, это означает, что «то, что следует далее, не является частью языкового стандарта, и поэтому может быть различным для каждой платформы, на которую вы нацеливаете / компилируете«

1 голос
/ 26 июня 2010

Вот список нестандартного поведения в VC ++: http://msdn.microsoft.com/en-us/library/x84h5b78%28VS.71%29.aspx

0 голосов
/ 26 июня 2010

Очень чистый, но непереносимый для каждого, в выражении: Visual c ++ "для каждого" переносимости

...