Сегодня предложил тим-лидам высказаться о возможности использовать это в наших проектах.
1) Реакция разная. 99% всего кода компании это C++ std-based код, и возникает вопрос зачем это нужно если мы используем const std::string& parameter, std::vector, map и т.д. (утрирую). С дугой стороны, если учесть, что внури С++ кода есть тонны мест, где торчат уши достаточно низкоуровневых прямых вызовы RTL/API, где есть тонны мелких функций обработки буферов стреамов, строк, шаред мемори стораджей, и т.д. - вопрос о нужности SAL для меня однозначный. Я скорее всего буду использовать везде в коде С++, где это уместно (если начальство не запретит).
2)Есть вопрос - насколько это портабельно. Действительно сложно предположить возможность портить миллионы строк кода для Windows на другую платформу. Здесь возразить нечего. Хотя я вообще не сторонник создания портабельного кода для Windows/MAC/.......
3)Есть также вопрос - как указано в http://blogs.msdn.com/michael_howard/archive/2006/05/19/602077.aspx это работает только на "...that can help static analysis tools, such as the /analyze switch in Visual Studio 2005 Team System and Visual Studio 2005 Team Edition for Developers..."
Действительно, этонеработает, например, на Express edition 2005:
1>Compiling...
1>cl : Command line warning D9040 : ignoring option '/analyze'; Code Analysis warnings are not available in this edition of the compiler
Но вот если собрать проект в VC++ 2008 даже Express Edition с опцией '/analyze':
#include "stdafx.h"
#include <windows.h>
void FillString(
__out_ecount(cchBuf) TCHAR* buf,
size_t cchBuf,
char ch) {
for (size_t i = 0; i < cchBuf; i++) {
buf[i] = ch;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR buf[100];
FillString( buf, 102, 0);
FillString( NULL, 102, 0);
return 0;
}
---
то получим следующие варнинги (что и нужно):
1>c:\users\val\documents\visual studio 2008\projects\sal\test1\test1.cpp(21) : warning C6202: Buffer overrun for 'buf', which is possibly stack allocated, in call to 'FillString': length '204' exceeds buffer size '200'
1>c:\users\val\documents\visual studio 2008\projects\sal\test1\test1.cpp(22) : warning C6309: Argument '1' is null: this does not adhere to function specification of 'FillString'
|