Nasıl C#, C veya 1 2 3 ... 1000 hesaplamak için Java derleyici sürücü için?
Yakın tarihli bir röportajda, gerçekten garip bir soru sordu. Mülakatı yapan kişi bana nasıl 1 2 3 ... 1000 hesaplayabilir ben derleyici özellikleri kullanmak istedi. Bu demektir ki ben değilim izin için yazdığım bir program ve çalıştırmak, ama ben yazma programı kullanabilirim derleyici için hesaplama bu miktar ise derleme ve baskı sonucu ne zaman derleme tamamlar. Bir ipucu olarak, jenerik ve derleyici işlemci ön özellikleri kullanabilirim söyledi. C , C kullanmak mümkündür# ya da Java derleyicisi. Herhangi bir fikir???
Bu soru herhangi bir döngü olmadan toplamı asked here bilgisayar ile ilgili değil. Buna ek olarak, toplam derleme sırasında hesaplanmış olması GEREKTİĞİNİ belirtmek gerekir. Sadece sonucu C derleyici yönergeleri kullanarak baskı kabul edilebilir değil.
Düzenleme:
Daha gönderildi cevapları hakkında okuma, derleme C şablonlar kullanılarak sırasında sorunları çözme denirmetaprogramming. Bu yanlışlıkla Dr. Erwin Unruh tarafından keşfedilmiş bir tekniktir, C dilinin standart hale getirilmesi sürecinde. Daha fazla wiki page of meta-programmingbu konu hakkında okuyabilirsiniz. Java ek açıklamaları kullanarak program yazmak mümkün gibi görünüyor. Bir göz sürebilirmaress'saşağıda cevap.
Edit 2:
C meta-programlama hakkında çok güzel bir kitap this one. Değer ilgilenen varsa bir göz atın.
3 düzenlemek
Meta-programlama kullanışlı bir C kütüphanesi 10 ** Boost MPL.
CEVAP
GüncellendiŞimdi gelişmiş özyineleme derinliği! Artan derinliği olmayan MSVC10 ve GCC çalışır. :)
Basit-derleme ayrıca özyineleme:
template<unsigned Cur, unsigned Goal>
struct adder{
static unsigned const sub_goal = (Cur Goal) / 2;
static unsigned const tmp = adder<Cur, sub_goal>::value;
static unsigned const value = tmp adder<sub_goal 1, Goal>::value;
};
template<unsigned Goal>
struct adder<Goal, Goal>{
static unsigned const value = Goal;
};
Testcode:
template<unsigned Start>
struct sum_from{
template<unsigned Goal>
struct to{
template<unsigned N>
struct equals;
typedef equals<adder<Start, Goal>::value> result;
};
};
int main(){
sum_from<1>::to<1000>::result();
}
GCC çıktı:
hata: ‘yapı sum_from<1u>ilanı ::&; 1000u>lt ::&; 500500u^ eşittir . lt ’
MSVC10 çıktı:
error C2514: 'sum_from<Start>::to<Goal>::equals<Result>' : class has no constructors
with
[
Start=1,
Goal=1000,
Result=500500
]
Nasıl iki mutlak yol (veya URL) Java g...
Dize tek boşluk ile 2 veya daha fazla ...
Nasıl bir veya CXF JAX-WS WSDL konumun...
Nasıl tamsayılar için Java 2 tabanı he...
Nasıl veya OS X (GÖRDÜM) varsayılan Ja...