Использование scanf_s в dev-C выдает ошибку: ‘scanf_s’ не был объявлен в этой области

#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), в результате чего они будут неопределенными.