得到一个"隐含的函数声明"代码块中的错误

时间:2016-05-25 03:25:59

标签: c gcc c11 tr24731

我还是C的新手,我在代码块中遇到错误,导致我无法运行程序。我得到错误"函数printf_s()和scanf_s()的隐式声明。这是我的代码:

#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>

int main(void)
{
  int age = 0;
  char name[20];

  printf_s("Enter your age: ");
  scanf_s("%d", &age);

  print_s("Enter your name: ");
  scanf_s("%s", name, sizeof(name));

  printf_s("Your name is %s and you are %d years old.\n", name, age);

  return 0;
}

3 个答案:

答案 0 :(得分:3)

printf_sscanf_s仅在库实施定义__STDC_LIB_EXT1__时可用。它是自C11标准以来添加的。

首先,您必须检查__STDC_LIB_EXT1__是否已定义,然后才能使用printf_sscanf_s

#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
int main(void)
{
  int age = 0;
  char name[20];
  #ifdef __STDC_LIB_EXT1__
      printf_s("Enter your age: ");
      scanf_s("%d", &age);
      print_s("Enter your name: ");
      scanf_s("%s", name, sizeof(name));
      printf_s("Your name is %s and you are %d years old.\n", name, age);
  #else
      printf("Enter your age: ");
      scanf("%d", &age);
      print("Enter your name: ");
      scanf("%19s", name);
      printf("Your name is %s and you are %d years old.\n", name, age);
  #endif
  return 0;
}

答案 1 :(得分:1)

根据ISO C标准,您使用的功能是“可选的”。

显然,与Code :: Blocks捆绑在一起的编译器/库没有实现此选项。所以你现在的选择是:

  • 请勿使用这些功能
  • 使用实现此选项的编译器
  • 使用条件代码,如jblixr的回答
  • 所示

此外,您可以使用MinGW(或MinGW-w64)记录功能请求。

为什么C标准包含可选功能?通常这是政治进程的结果;标准委员会中的一个派系想要这个功能而另一个派别没有,所以妥协是使该功能成为可选的。另一个例子是可变长度数组。

答案 2 :(得分:-2)

标准函数名称没有_s,因此程序的标准兼容版本将是

#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
int main(void)
{
  int age = 0;
  char name[20];

  printf("Enter your age: ");
  scanf("%d", &age);

  print("Enter your name: ");
  scanf("%19s", name);

  printf("Your name is %s and you are %d years old.\n", name, age);

  return 0;
}
相关问题