在c中定义函数和打印

Defining function and printing in c

我正在尝试定义预定义函数,但出现错误...下面的程序有什么问题。有人告诉我,我可以定义预定义函数。我知道这是不正确的,但我仍然发布...如果有人有......

#include <stdio.h>
#include <stdlib.h>
#define scanf "%s abc";

int main()
 {
  printf(scanf,scanf); 
   return 0;
  }

这个

printf(scanf, scanf);

扩展到这个

printf("%s abc"; , "%s abc";);

显然它不会在函数调用中使用那些分号进行编译。去掉宏定义中的分号,函数调用会变成

printf("%s abc" , "%s abc");

可能会编译并打印 %s abc abc。或者它可能会做一些完全不同的事情,因为它是未定义的行为,正如 更详细地解释的那样。

除此之外,宏的使用非常荒谬且具有误导性,因此我强烈建议不要使用它。不要使用宏来重新定义有效标识符,例如 scanf,因为如果其他人试图阅读代码,他们将无法理解它,因为他们知道的东西突然不再那样工作了。

你应该删除#define

行中的分号

这是 C 标准关于将标准库标识符定义为宏的说法:

C17 7.1.3/1 重点我的:

  • Each identifier with file scope listed in any of the following subclauses (including the future library directions) is reserved for use as a macro name and as an identifier with file scope in the same name space if any of its associated headers is included.

C17 7.1.3/2 重点我的:

No other identifiers are reserved. If the program declares or defines an identifier in a context in which it is reserved (other than as allowed by 7.1.4), or defines a reserved identifier as a macro name, the behavior is undefined.

这意味着任何事情都可能发生,#include <stdio.h> 后跟 #define scanf 将被视为错误。