Ошибка компилятора C2268
"функция" представляет определяемый компилятором модуль поддержки библиотеки. Модули поддержки библиотек не поддерживаются с параметром /GL; компилируйте объектный файл "файл" без параметра /GL.
Имя функции, определенной в исходном коде, совпадает с именем внутренней функции компилятора. Скомпилируйте модуль, содержащий функцию, без параметра /GL.
Следующий пример приводит к возникновению ошибки C2268:
// C2268.c
// compile with: /c
// processor: x86
extern int SHFusionLoadLibrary(int lpLibFileName);
int __cdecl _except_handler3(void) {
return SHFusionLoadLibrary(0);
}
extern int main(void);
void* mainCRTStartup(void* p) {
p = main;
return p;
}
затем:
// C2268b.c
// compile with: C2268.c /EHsc /GL /Ob0 /O2 /Fa /GS- /link /nodefaultlib
// processor: x86
extern int SHFusionLoadLibrary(int lpLibFileName);
extern int __cdecl _except_handler3(void);
extern void mainCRTStartup(void*);
int g = 2;
#define ENTERCONTEXT(fail) \
int ulCookie = 0;\
if (!SHActivateContext(&ulCookie)) \
return fail;\
__try {
#define LEAVECONTEXT \
} __finally {SHDeactivateContext(ulCookie);}
int SHActivateContext(int* a) {
return *a == g || !*a ||_except_handler3();
}
void SHDeactivateContext(int a) {
g = a;
}
int SHFusionLoadLibrary(int lpLibFileName) { // C2268
ENTERCONTEXT(0)
g = lpLibFileName;
LEAVECONTEXT
return lpLibFileName;
}
int main(void) {
g = SHFusionLoadLibrary(10);
return 0;
}