#include<stdio.h>
#define sqr(i) i*i
int main()
{
printf("%d %d\n", sqr(3), sqr(3+1));
}
dlaczego na wyjściu pojawia się:
9 7
#include<stdio.h>
#define sqr(i) i*i
int main()
{
printf("%d %d\n", sqr(3), sqr(3+1));
}
dlaczego na wyjściu pojawia się:
9 7
A czego sie spodziewałeś?
#define sqr(x) (x)*(x)
Alternatywa dla C++:
template<typename T>
auto sqr(T x) { return x * x; }
Lub jeżeli lubisz wydziwiać:
auto sqr = [](auto x){ return x * x; };
Lub jeśli lubisz cholernie wydziwiać:
template<typename T>
auto sqr(T x) { return std::multiplies<T>{}(x, x); }
Lub jeśli lubisz cholernie wydziwiać chcąc obliczyć wynik później:
template<typename T>
auto sqr(T x) { return [=]{ return x * x; }; }
//np: sqr(3+1)()
Ok już wszystko jasne. Pytanie znalazłem w teście.
A jak chcesz być bardzo poprawny to
template<typename T>
concept bool squareable = requires(T c) { // squareable wtf
operator*(c,c);
};
template<squareable T>
auto sqr(T &&x) { return x * x; }
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.