在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
将被视为错误。
我正在尝试定义预定义函数,但出现错误...下面的程序有什么问题。有人告诉我,我可以定义预定义函数。我知道这是不正确的,但我仍然发布...如果有人有......
#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
将被视为错误。