#gcc #x86 #inline-assembly #dev-c #intel-syntax
#gcc #x86 #встроенная сборка #dev-c #intel-синтаксис
Вопрос:
[Error] 'scanf_s' was not declared in this scope
Я здесь новичок и не очень разбираюсь в программировании
Мы используем этот тип программирования в университете.
мы добавляем это перед основным текстом /*#include,#pragma предупреждение (отключить: 4996)
#include<stdio.h>
int main()
{
int _a;
char _b;
printf("Zadaj cislo od 0 do 15: ");
scanf_s("%d",amp;_a);
asm(".intel_syntax noprefix n"
"mov eax, _a n"
"mov ecx, 9 n"
"cmp eax,ecx n"
"jg vacsie n "
"jl mensie n"
"mensie: n"
"add eax, '0' n"
"jmp end"
"vacsie: n"
"add eax,55 n"
"end:"
"mov _b,al"
".att_syntax n"
);
if (_a<=15 amp;amp; _a>0)
printf("v hexa %c n",_b);
else printf("cislo nieje spravne");
getchar();
return 0;
}
Комментарии:
1.
scanf_s
это расширение Microsoft. Переключитесь на стандартныйscanf
.2. Dev-C использует компилятор GCC. Возможно, у него нет реализации
scanf_s
, которая начиналась как расширение VisualC . Особенно учитывая, что Dev-C отстает от других IDE, включая предоставление актуальной версии компилятора (scanf_s
был добавлен в стандартный C со стандартом C11, для включения которого также могут потребоваться специальные флаги).3. @Someprogrammerdude Компилятор не предоставляет функцию; ее предоставляет libc.
4. @Someprogrammerdude : Просто продолжение вашего комментария. Он был добавлен в C11 в качестве необязательной функции в приложении K. Таким образом, даже C11 этого не требует, и приложение K может быть удалено из будущих стандартов.
5. В самой встроенной сборке довольно много проблем. Похоже, он был перенесен из инструкции Microsoft
asm{}
. В некоторых строках отсутствуетn
, регистры перегружены, и компилятору не было сообщено, а в документации GCC явно упоминается, что доступ к переменным непосредственно внутри встроенной сборки выполняться не должен. Даже тогда, если вы попытаетесь их использовать, они должны находиться в глобальной области видимости (и даже тогда оптимизатор может избавиться от них, если на них нет ссылок в коде C), в результате чего они будут неопределенными.