У меня есть ниже класс:
class Cdata12Mnt
{
public:
char IOBname[ID1_IOB_PIOTSUP-ID1_IOB_TOP][BOADNAM_MAX + 4];
char ExIOBname[ID1_MAX_INF-ID1_EXIOB_U1TOP][BOADNAM_MAX + 4];
char cflpath[256];
char basetext[256];
UINT database[ID1_MAX_INF];
int State;
public:
char SelectPath[256];
public:
int GetIOBName(int slt,char *Name);
Cdata12Mnt(char *SelectPath);
virtual ~Cdata12Mnt();
int GetValue(int id);
int GetState() { return State; }
};
И у меня есть функция как ниже:
Cdata12Mnt::Cdata12Mnt(char *SelectPath)
{
SCTReg reg;
char buf[256], *cpnt, *npnt, *bpnt1, *bpnt2;
char *startcode[] = {"CNTL_CODE ","SEGMENT "};
char *stopcode = {"END_CNTL_CODE "};
FILE *fp;
int ii, infl;
State = 0;
for (ii = 0; ii < (ID1_IOB_PIOTSUP - ID1_IOB_TOP); ii++) {
strcpy(IOBname[ii], "");
}
for (ii = 0; ii < (ID1_MAX_INF-ID1_EXIOB_U1TOP); ii++) {
**strcpy(ExIOBname[ii], "");**
}
sprintf(cflpath, "%s\%s", SelectPath, CDATAFL);
if ((fp = fopen(cflpath,"r"))!=NULL) {
for (ii = 0, infl = 0; fgets(buf, 256, fp) != NULL;) {
if (infl == 0 && strncmp(buf, startcode[0], strlen(startcode[0])) == 0) {
if ((cpnt = strchr(&buf[strlen(startcode[0])],*startcode[1])) != NULL) {
if (strncmp(cpnt,startcode[1], strlen(startcode[1])) == 0) {
infl = 1;
continue;
}
}
}
if (infl == 0) {
continue;
}
if (strncmp(buf,stopcode,strlen(stopcode))==0) {
if (ii == ID1_EXIOB_U1TOP) {
for (int nDataNumber = ii; nDataNumber < ID1_MAX_INF; nDataNumber++) {
database[nDataNumber] = 0;
}
}
infl = 0;
continue;
}
if (strncmp(&buf[14], " DD ", 4) == 0) {
if ((cpnt=strchr(buf, ';')) != NULL) {
*cpnt = '';
}
if (ii >= ID1_IOB_TOP && ii < ID1_IOB_PIOTSUP) {
if ((bpnt1 = strchr(cpnt + 1,'(')) != NULL && (bpnt2=strchr(cpnt + 1,')'))!=NULL && bpnt1 < bpnt2) {
*bpnt2 = '';
*(bpnt1 + BOADNAM_MAX + 1) = '';
strcpy(IOBname[ii-ID1_IOB_TOP], bpnt1 + 1);
}
}
if (ii >= ID1_EXIOB_U1TOP && ii < ID1_MAX_INF) {
if ((bpnt1 = strchr(cpnt + 1, '(')) != NULL && (bpnt2=strchr(cpnt+1,')'))!=NULL && bpnt1 < bpnt2) {
*bpnt2='';
*(bpnt1+BOADNAM_MAX+1)='';
strcpy(ExIOBname[ii-ID1_EXIOB_U1TOP], bpnt1 + 1);
}
}
for (cpnt = &buf[18]; cpnt != NULL;) {
if ((npnt=strchr(cpnt, ',')) != NULL)
*npnt='';
}
if (strchr(cpnt,'H')!=NULL) {
sscanf(cpnt,"%XH",&database[ii]);
} else {
database[ii]=atoi(cpnt);
}
ii++;
cpnt = npnt;
if (cpnt != NULL) {
cpnt++;
}
}
}
}
fclose(fp);
} else {
State=-1;
}
Когда я компилирую эту функцию в Visual Studio 2008, она выдает ошибку при strcpy(IOBname[ii],"");
как ниже.
ошибка C2220: предупреждение рассматривается как ошибка — файл объекта не создан
Как исправить эту ошибку?
21
Решение
Ошибка говорит о том, что предупреждение было обработано как ошибка. Поэтому ваша проблема — предупреждающее сообщение! Проверьте их и исправьте их.
Если вы не знаете, как их найти: откройте Error List
(View
> Error List
) и нажмите на Warning
,
23
Другие решения
Идти к project properties -> configurations properties -> C/C++ -> treats warning as error -> No (/WX-)
,
10
Это сообщение об ошибке очень запутанно. Я просто исправил другие «предупреждения» в своем проекте, и у меня действительно было только одно (простое):
предупреждение C4101: ‘i’: локальная переменная без ссылки
После того, как я прокомментировал это неиспользованным i
и скомпилировал его, другая ошибка исчезла.
5
Как примечание, вы можете включить / отключить отдельные предупреждения, используя #pragma
, Вы можете взглянуть на документацию Вот
Из документации:
// pragma_warning.cpp
// compile with: /W1
#pragma warning(disable:4700)
void Test() {
int x;
int y = x; // no C4700 here
#pragma warning(default:4700) // C4700 enabled after Test ends
}
int main() {
int x;
int y = x; // C4700
}
3
Это предупреждение о небезопасном использовании strcpy. Пытаться IOBname[ii]='';
вместо.
1
I have below class
class Cdata12Mnt
{
public:
char IOBname[ID1_IOB_PIOTSUP-ID1_IOB_TOP][BOADNAM_MAX + 4];
char ExIOBname[ID1_MAX_INF-ID1_EXIOB_U1TOP][BOADNAM_MAX + 4];
char cflpath[256];
char basetext[256];
UINT database[ID1_MAX_INF];
int State;
public:
char SelectPath[256];
public:
int GetIOBName(int slt,char *Name);
Cdata12Mnt(char *SelectPath);
virtual ~Cdata12Mnt();
int GetValue(int id);
int GetState() { return State; }
};
And I have function as below
Cdata12Mnt::Cdata12Mnt(char *SelectPath)
{
SCTReg reg;
char buf[256], *cpnt, *npnt, *bpnt1, *bpnt2;
char *startcode[] = {"CNTL_CODE ","SEGMENT "};
char *stopcode = {"END_CNTL_CODE "};
FILE *fp;
int ii, infl;
State = 0;
for (ii = 0; ii < (ID1_IOB_PIOTSUP - ID1_IOB_TOP); ii++) {
strcpy(IOBname[ii], "");
}
for (ii = 0; ii < (ID1_MAX_INF-ID1_EXIOB_U1TOP); ii++) {
**strcpy(ExIOBname[ii], "");**
}
sprintf(cflpath, "%s\%s", SelectPath, CDATAFL);
if ((fp = fopen(cflpath,"r"))!=NULL) {
for (ii = 0, infl = 0; fgets(buf, 256, fp) != NULL;) {
if (infl == 0 && strncmp(buf, startcode[0], strlen(startcode[0])) == 0) {
if ((cpnt = strchr(&buf[strlen(startcode[0])],*startcode[1])) != NULL) {
if (strncmp(cpnt,startcode[1], strlen(startcode[1])) == 0) {
infl = 1;
continue;
}
}
}
if (infl == 0) {
continue;
}
if (strncmp(buf,stopcode,strlen(stopcode))==0) {
if (ii == ID1_EXIOB_U1TOP) {
for (int nDataNumber = ii; nDataNumber < ID1_MAX_INF; nDataNumber++) {
database[nDataNumber] = 0;
}
}
infl = 0;
continue;
}
if (strncmp(&buf[14], " DD ", 4) == 0) {
if ((cpnt=strchr(buf, ';')) != NULL) {
*cpnt = '';
}
if (ii >= ID1_IOB_TOP && ii < ID1_IOB_PIOTSUP) {
if ((bpnt1 = strchr(cpnt + 1,'(')) != NULL && (bpnt2=strchr(cpnt + 1,')'))!=NULL && bpnt1 < bpnt2) {
*bpnt2 = '';
*(bpnt1 + BOADNAM_MAX + 1) = '';
strcpy(IOBname[ii-ID1_IOB_TOP], bpnt1 + 1);
}
}
if (ii >= ID1_EXIOB_U1TOP && ii < ID1_MAX_INF) {
if ((bpnt1 = strchr(cpnt + 1, '(')) != NULL && (bpnt2=strchr(cpnt+1,')'))!=NULL && bpnt1 < bpnt2) {
*bpnt2='';
*(bpnt1+BOADNAM_MAX+1)='';
strcpy(ExIOBname[ii-ID1_EXIOB_U1TOP], bpnt1 + 1);
}
}
for (cpnt = &buf[18]; cpnt != NULL;) {
if ((npnt=strchr(cpnt, ',')) != NULL)
*npnt='';
}
if (strchr(cpnt,'H')!=NULL) {
sscanf(cpnt,"%XH",&database[ii]);
} else {
database[ii]=atoi(cpnt);
}
ii++;
cpnt = npnt;
if (cpnt != NULL) {
cpnt++;
}
}
}
}
fclose(fp);
} else {
State=-1;
}
When I compile this function in Visual studio 2008, it gives me error at strcpy(IOBname[ii],"");
as below
error C2220: warning treated as error — no ‘object’ file generated
How to fix this error?
I am getting the following error while building a project. Even though I am setting the
property «treat warning as errors» to «NO» I am getting this one:
error C2220: warning treated as error - no object file is created.
Can any one Help me Resolving This One? Thanks in Advance.
sam hocevar
11.8k5 gold badges49 silver badges68 bronze badges
asked Jun 1, 2009 at 7:35
1
The documentation for C2220 suggests compiling at a lower warning level. It also shows that the warning treated as error option is implemented as a compiler flag: /WX. So you could search your .vcproj file for that text and manually remove it from the file.
answered Jun 1, 2009 at 15:41
sean esean e
11.8k3 gold badges44 silver badges56 bronze badges
Probably you forgot to add an header. Just where you get the first warning and see in what header file is defined.
Regards
answered Jun 1, 2009 at 7:56
SacxSacx
6,2564 gold badges22 silver badges29 bronze badges
I got «error C2220: warning treated as error — no object file is created.» in below code.
Once I changed datatype of total to int , the error was resolved.
int colNum=0;
unsigned int total=123;
for (colNum=0;colNum<total;colNum++) {
answered Jul 14, 2014 at 20:46
sparcosparco
851 silver badge7 bronze badges
1
#pragma warning(disable : 4146)
Set this at the file level instead of changing the project setting.
answered Sep 3, 2014 at 11:37
Akaanthan CcoderAkaanthan Ccoder
2,1595 gold badges21 silver badges37 bronze badges
#c #visual-studio-2019 #compiler-warnings #code-analysis
#c #visual-studio-2019 #компилятор-предупреждения #анализ кода
Вопрос:
Недавно я переместил большую кодовую базу с VS2013 на VS2019, которая создается для 32-разрядных и 64-разрядных целей Windows.
Отладочные и выпускные версии компилируются с многочисленными предупреждениями, хотя они в основном такие же, как в сборке VS2013. Большинство из них являются тривиальными проблемами, которые, как я знаю, безопасны. Я компилирую с помощью опции компилятора «W3».
Однако, когда я пытаюсь скомпилировать «анализируемую» версию сборки (я включаю опцию компилятора «/ analyze») Я получаю многие из следующих:
ошибка C2220: следующее предупреждение рассматривается как ошибка
Этого следовало ожидать, и некоторые из этих ошибок требуют внимания. Но первое, что кажется странным, это то, что МНОГИЕ из этих «ошибок» были из библиотек Windows SDK — код, который я не совсем готов редактировать.
Затем я прочитал следующее: https://learn.microsoft.com/en-us/cpp/build/reference/analyze-code-analysis?view=vs-2019 Поэтому я изменил «/ analyze» на «analyze:WX-«, просто ради эксперимента. Это заставило замолчать МНОГИЕ ошибки, но я все равно получаю несколько сообщений «Ошибка C2220: следующее предупреждение рассматривается как ошибка», в основном в сторонних библиотеках. Я рад исправить (или игнорировать, где это уместно) проблемы, которые возникли в моем собственном коде.
Итак, мой вопрос в том, как мне подавить эту ошибку, когда она появляется в таких вещах, как Windows SDK и очень хорошо используемые сторонние библиотеки? Тот факт, что это не более чем проблема, заставляет меня подозревать, что я что-то пропустил здесь. Но в настоящее время я не могу выполнить анализ кода, что на самом деле не было проблемой в VS2013.
Комментарии:
1. По какой-то причине включен /WX , который превращает предупреждения в ошибки C2220. Продолжайте, отключив его.
2. После переноса кода с VS2013 на VS2015 эта
Treat Linker Warning As Errors
опция будет включена в некоторыхProject
параметрах компиляции. Вы могли бы установитьNo
,Properties->C/C ->General->Treat Linker Warning As Errors
чтобы избежать их.
description | title | ms.date | f1_keywords | helpviewer_keywords | ms.assetid |
---|---|---|---|---|---|
Learn more about: Compiler Error C2220 |
Compiler Error C2220 |
11/04/2016 |
C2220 |
C2220 |
d610802c-64d7-40ad-a2a6-0ed0b6815a6c |
Compiler Error C2220
warning treated as error — no object file generated
/WX tells the compiler to treat all warnings as errors. Because an error occurred, no object or executable file was generated.
This error only appears when the /WX flag is set and a warning occurs during compilation. To fix this error, you must eliminate every warning in your project.
To fix, use one of the following techniques
-
Fix the problems that cause warnings in your project.
-
Compile at a lower warning level—for example, use /W3 instead of /W4.
-
Use a warning pragma to disable or suppress a specific warning.
-
Don’t use /WX to compile.
вредина 0 / 0 / 3 Регистрация: 08.10.2012 Сообщений: 141 |
||||
1 |
||||
Требуется директива препроцессору14.11.2012, 15:39. Показов 17072. Ответов 3 Метки нет (Все метки)
у меня проблема такого плана (опишу все действия сначала, т.к. не уверен в их правильности):
и тут же мне внизу пишет ошибки
__________________ 0 |
Don’t worry, be happy 17779 / 10543 / 2035 Регистрация: 27.09.2012 Сообщений: 26,514 Записей в блоге: 1 |
|
14.11.2012, 16:13 |
2 |
точки с запятой после includ’ов уберите. 0 |
0 / 0 / 3 Регистрация: 08.10.2012 Сообщений: 141 |
|
14.11.2012, 19:12 [ТС] |
3 |
писал с ними и без, все равно ошибку выдает перед самим #include больше ничего не надо ? 0 |
uburuntu 95 / 95 / 58 Регистрация: 04.10.2012 Сообщений: 189 |
||||
14.11.2012, 19:19 |
4 |
|||
Могу ошибаться, но попробуй так:
А точки с запятой точно не надо 0 |
При создании решения VS2013 (перенесенного из VS8) я получаю следующую ошибку:
Ошибка 1 ошибка C2220: предупреждение рассматривается как ошибка — нет файла объекта
сгенерированный C: Program Files Microsoft Visual Studio
12.0 VC atlmfc include afx.h 38 Предупреждение 2, предупреждение C4996: ‘MBCS_Support_Deprecated_In_MFC’: поддержка MBCS в MFC устарела
и может быть удален в будущей версии MFC. C: Program
Файлы Microsoft Visual Studio 12.0 VC atlmfc include afx.h 38
Это вызвано следующим кодом:
#ifdef _MBCS
// Warn about MBCS support being deprecated: see http://go.microsoft.com/fwlink/p/?LinkId=279048 for more information.
#pragma warning(push)
#pragma warning(1 : 4996)
inline __declspec(deprecated("MBCS support in MFC is deprecated and may be removed in a future version of MFC.")) void MBCS_Support_Deprecated_In_MFC() { }
class MBCS_Deprecated_MFC
{
public:
MBCS_Deprecated_MFC() { MBCS_Support_Deprecated_In_MFC(); }
};
#pragma warning(pop)
#endif
Как я могу найти, где _MBCS определяется в решении. Поиск не имеет никаких результатов.
4
Решение
_MBCS
Символ будет определен в результате настроек в свойствах вашего проекта. смотреть на General->Character Set
— это то, что добавляет необходимые записи в командную строку.
Чтобы продолжить использовать MBCS, вам необходимо установить дополнительную поддержку от Microsoft здесь
Как это отмечено в MSDN:
Код в вашем вопросе на самом деле дает ссылку на этот блог, который обсуждает изменения и включает ссылку на скачивание:
// Warn about MBCS support being deprecated: see http://go.microsoft.com/fwlink/p/?LinkId=279048 for more information.
Таким образом, вы можете скачать патч по ссылке выше или перенести приложение в UNICODE.
7
Другие решения
Других решений пока нет …
When building a VS2013 solution (migrated from VS8) I get the following error :
Error 1 error C2220: warning treated as error — no ‘object’ file
generated C:Program FilesMicrosoft Visual Studio
12.0VCatlmfcincludeafx.h 38 Warning 2 warning C4996: ‘MBCS_Support_Deprecated_In_MFC’: MBCS support in MFC is deprecated
and may be removed in a future version of MFC. C:Program
FilesMicrosoft Visual Studio 12.0VCatlmfcincludeafx.h 38
This is caused bij the following code :
#ifdef _MBCS
// Warn about MBCS support being deprecated: see http://go.microsoft.com/fwlink/p/?LinkId=279048 for more information.
#pragma warning(push)
#pragma warning(1 : 4996)
inline __declspec(deprecated("MBCS support in MFC is deprecated and may be removed in a future version of MFC.")) void MBCS_Support_Deprecated_In_MFC() { }
class MBCS_Deprecated_MFC
{
public:
MBCS_Deprecated_MFC() { MBCS_Support_Deprecated_In_MFC(); }
};
#pragma warning(pop)
#endif
How can I find where _MBCS is defined in the solution. Find doesn’t has any results.
asked Dec 20, 2013 at 15:24
3
The _MBCS
symbol will be defined as a result of the settings in your project properties. Look at General->Character Set
— this is what adds the required entries to the command line.
To continue using MBCS, you need to install the optional support from Microsoft here
As it notes in MSDN:
The code in your question actually gives a link to this blog post, which discusses the changes and includes a link to the download:
// Warn about MBCS support being deprecated: see http://go.microsoft.com/fwlink/p/?LinkId=279048 for more information.
So, you can either download the patch from the link above or migrate your application to UNICODE.
answered Dec 20, 2013 at 15:32
Roger RowlandRoger Rowland
25.6k11 gold badges71 silver badges113 bronze badges
6
When building a VS2013 solution (migrated from VS8) I get the following error :
Error 1 error C2220: warning treated as error — no ‘object’ file
generated C:Program FilesMicrosoft Visual Studio
12.0VCatlmfcincludeafx.h 38 Warning 2 warning C4996: ‘MBCS_Support_Deprecated_In_MFC’: MBCS support in MFC is deprecated
and may be removed in a future version of MFC. C:Program
FilesMicrosoft Visual Studio 12.0VCatlmfcincludeafx.h 38
This is caused bij the following code :
#ifdef _MBCS
// Warn about MBCS support being deprecated: see http://go.microsoft.com/fwlink/p/?LinkId=279048 for more information.
#pragma warning(push)
#pragma warning(1 : 4996)
inline __declspec(deprecated("MBCS support in MFC is deprecated and may be removed in a future version of MFC.")) void MBCS_Support_Deprecated_In_MFC() { }
class MBCS_Deprecated_MFC
{
public:
MBCS_Deprecated_MFC() { MBCS_Support_Deprecated_In_MFC(); }
};
#pragma warning(pop)
#endif
How can I find where _MBCS is defined in the solution. Find doesn’t has any results.
asked Dec 20, 2013 at 15:24
3
The _MBCS
symbol will be defined as a result of the settings in your project properties. Look at General->Character Set
— this is what adds the required entries to the command line.
To continue using MBCS, you need to install the optional support from Microsoft here
As it notes in MSDN:
The code in your question actually gives a link to this blog post, which discusses the changes and includes a link to the download:
// Warn about MBCS support being deprecated: see http://go.microsoft.com/fwlink/p/?LinkId=279048 for more information.
So, you can either download the patch from the link above or migrate your application to UNICODE.
answered Dec 20, 2013 at 15:32
Roger RowlandRoger Rowland
25.6k11 gold badges71 silver badges113 bronze badges
6
Предупреждение C4668 «STDC_WANT_SECURE_LIB» не задано как
макроопределение препроцессора, замена на «0» для «#if/#elif»
в справочнике написано:
Предупреждение компилятора (уровень 4) C4668
«символ» не определен в качестве макроса препроцессора и будет заменен в «директивах» на «0»
Символ, который не был определен, использовался с директивой препроцессора. Символ будет иметь значение false. Чтобы определить символ, можно использовать либо директиву #define , либо параметр компилятора /d .
Это предупреждение отключено по умолчанию. Подробнее: Выключенные по умолчанию предупреждения компилятора .
Вопрос не в том как это игнорировать а как это исправить
#include <iostream>
int main()
{
return 0;
}
Предупреждение C4668 «STDC_WANT_SECURE_LIB» не задано как макроопределение препроцессора, замена на «0» для «#if/#elif»
Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка C2220 следующее предупреждение рассматривается как ошибка Proverka C:Program Files (x86)Microsoft Visual Studio2019EnterpriseVCToolsMSVC14.29.30133includelimits.h 70
Предупреждение C4668 «STDC_WANT_SECURE_LIB» не задано как макроопределение препроцессора, замена на «0» для «#if/#elif» Proverka C:Program Files (x86)Microsoft Visual Studio2019EnterpriseVCToolsMSVC14.29.30133includelimits.h 70
Предупреждение C4365 аргумент: преобразование «long» в «unsigned int», несоответствие типов со знаком и без Proverka C:Program Files (x86)Microsoft Visual Studio2019EnterpriseVCToolsMSVC14.29.30133includexmemory 162
Предупреждение C4365 аргумент: преобразование «long» в «unsigned int», несоответствие типов со знаком и без Proverka C:Program Files (x86)Microsoft Visual Studio2019EnterpriseVCToolsMSVC14.29.30133includexmemory 172
Предупреждение C4365 аргумент: преобразование «long» в «unsigned int», несоответствие типов со знаком и без Proverka C:Program Files (x86)Microsoft Visual Studio2019EnterpriseVCToolsMSVC14.29.30133includeatomic 292
Предупреждение C4365 аргумент: преобразование «long» в «unsigned int», несоответствие типов со знаком и без Proverka C:Program Files (x86)Microsoft Visual Studio2019EnterpriseVCToolsMSVC14.29.30133includeatomic 308
Предупреждение C4365 аргумент: преобразование «long» в «unsigned int», несоответствие типов со знаком и без Proverka C:Program Files (x86)Microsoft Visual Studio2019EnterpriseVCToolsMSVC14.29.30133includeatomic 325
Предупреждение C4365 аргумент: преобразование «long» в «unsigned int», несоответствие типов со знаком и без Proverka C:Program Files (x86)Microsoft Visual Studio2019EnterpriseVCToolsMSVC14.29.30133includeatomic 388