объекты. В общем, проще выбрать один API и придерживаться его, и основная мотивация заключается в том, хотите ли вы буферизации и хотите ли вы, например, используйте карты памяти или файлы статистики.
у, что все эти 3 функции связаны с открытием файла.
Эта функция POSIX устарела. Вместо этого используйте совместимый с ISO C ++ _open.
Открывает файл. Эти функции устарели, потому что доступны более безопасные версии; смотрите _sopen_s, _wsopen_s.
Открывает файл. Доступны более безопасные версии этих функций, которые выполняют дополнительную проверку параметров и возвращают коды ошибок; см. fopen_s, _wfopen_s.
Итак, почему их три? Когда использовать что? Я думал, что POSIX это хорошо, но почему MSDN говорит, что версия POSIXopen
не рекомендуется? И есть лисоглашение об именовании связано с лидирующим подчеркиванием, чтобы я мог выбрать правильную функцию, основываясь на ее первом взгляде?
И когда я смотрю вКод ACPICAВижу код ниже: похоже_XXX
версия может отключить некоторыеРасширения языка MSчто именно эти расширения?
/*
* Map low I/O functions for MS. This allows us to disable MS language
* extensions for maximum portability.
*/
#define open _open
#define read _read
#define write _write
#define close _close
#define stat _stat
#define fstat _fstat
#define mkdir _mkdir
#define snprintf _snprintf
#if _MSC_VER <= 1200 /* Versions below VC++ 6 */
#define vsnprintf _vsnprintf
#endif
#define O_RDONLY _O_RDONLY
#define O_BINARY _O_BINARY
#define O_CREAT _O_CREAT
#define O_WRONLY _O_WRONLY
#define O_TRUNC _O_TRUNC
#define S_IREAD _S_IREAD
#define S_IWRITE _S_IWRITE
#define S_IFDIR _S_IFDIR
ДОБАВИТЬ 1Кажется, префикс подчеркивания_XXX
это соглашение Microsoft. Такие как_DEBUG, _CrtSetDbgFlagи вышеупомянутое_открытый, Некоторая цитата изMSDN:
В Microsoft C ++ идентификаторы с двумя ведущими символами подчеркивания зарезервированы для реализаций компилятора. Поэтому соглашение Microsoft должно ставить перед ключевыми словами Microsoft двойные подчеркивания. Эти слова не могут быть использованы в качестве имен идентификаторов.
Расширения Microsoft включены по умолчанию. Чтобы гарантировать, что ваши программы полностью переносимы, вы можете отключить расширения Microsoft, указав параметр командной строки ANSI-совместимый / Za (скомпилировать для совместимости с ANSI) во время компиляции. Когда вы делаете это, специфичные для Microsoft ключевые слова отключаются.
Когда расширения Microsoft включены, вы можете использовать ключевые слова Microsoft в своих программах. Для соответствия ANSI эти ключевые слова предваряютсядвойное подчеркивание, Для обратной совместимости,одного подчеркивание поддерживаются версии всех ключевых слов с двойным подчеркиванием, кроме __except, __finally, __leave и __try. Кроме того, __cdecl доступен без подчеркивания.
Ключевое слово __asm заменяет синтаксис C ++ asm. asm зарезервирован для совместимости с другими реализациями C ++, но не реализован. Используйте __asm.
Ключевое слово __based имеет ограниченное применение для 32-битных и 64-битных целевых компиляций.
Хотя согласно приведенной выше цитате,__int64
а также_int64
оба должны работать, но Visual Studio НЕ обеспечивает подсветку синтаксиса для_int64
, Но_int64
тоже могу скомпилировать.