【发布时间】:2020-04-18 21:32:50
【问题描述】:
#define minimum(mn, b) mn = min(b)
#define maximum(mx, c) mx = max(c)
#define INF 10000000
#define toStr(a) #a
#define io(v) v.push_back()
#define FUNCTION(a,b) #
#include <iostream>
#include <vector>
using namespace std;
#if !defined toStr || !defined io || !defined FUNCTION || !defined INF
#error Missing preprocessor definitions
#endif
FUNCTION(minimum, <)
FUNCTION(maximum, >)
int main(){
int n; cin >> n;
vector<int> v(n);
foreach(v, i) {
io(v)[i];
}
int mn = INF;
int mx = -INF;
foreach(v, i) {
minimum(mn, v[i]);
maximum(mx, v[i]);
}
int ans = mx - mn;
cout << toStr(Result =) <<' '<< ans;
return 0;
}
这是来自hackerrank question 的示例问题,因此其中会有一些错误。我想知道这部分是什么
FUNCTION(minimum, <)
FUNCTION(maximum, >)
是什么意思?它看起来不像宏,因为它不是以#define 开头的。论坛也没有对这部分有很好的解释,只是它与定义为#define minimum(mn, b) mn = min(b)和#define maximum(mx, c) mx = max(c)的宏有关。
'
我想知道它叫什么,以及一些关于阅读它的好资源的建议。
标题写得不好,因为我不知道该将代码中可疑的部分称为什么。
【问题讨论】:
-
我不相信
#define FUNCTION(a,b) #是有效的语法。#运算符应位于标记之前。 -
您应该“将代码中可疑的部分称为”任何有自尊的 C++ 开发人员都不应该编写的东西。像“hackerrank”这样的网站,以及类似的网站,并没有教你写得很好的 C++,也没有提供有用的知识。它们是对网络空间的浪费。
-
@IgorTandetnik 您可以在我提供的链接中查看问题。
-
链接中的问题似乎根本不包含
FUNCTION,无论是任何形状或形式。至少不是该页面对未登录用户的显示方式,而且我不会在该站点创建帐户。 -
它甚至没有编译(如预期的那样):
main.cpp:6:21: error: '#' is not followed by a macro parameter