C + + #, PHP tanımlamak

2 Cevap

Ben "eval" büyük ölçüde + + # özelliğini tanımlamak, ama nasıl PHP böyle bir şey yapacağını C rolünü doldurur fark:

#define D(x,y) if (N==x) return(y); else {
void Sample(int N) {
  D(3)
    D(4)
      D(22)
    }
  }
}

Sadece arama rutin, eval değil dönecektir; Benim sorunum eval ("return") olmasıdır. Benim diğer sorun makro parameterizing edilir.

2 Cevap

Muhtemelen kodunuzu makro yerine (ki bunu kendiniz yazmanız gerekir) bir Önişlemci kullanabilirsiniz.

Ancak, ben bu tür şeyleri kullanmak gerekir neden görmek için başarısız - bir işlevi tanımlayan ve kullanan ile yanlış bir şey var mı?

PHP veya (ASP gibi) kaynak kodunu derlemek gerektirmez başka dilde makro işe yaramaz. Makro performanslarını geliştirmek için C / C + + ile oluşturulan, ancak PHP gibi dillerde sadece performansları düşecektir.

Onlar gibi dillerde anlam C / C + + çünkü uygulamanın kaynak kodu kod tek bir monolitik standı (. Exe uzantılı) çalışan bir uygulama derlenmiş daha koduna makro dönüştürür C önişlemci tarafından preporcessed 1 olduğunu. Compliation böylece uygulama hızını artırır önce onlar zaten yerini çünkü. Exe uygulama makro denir her zaman tekrar genişledi değildir.

In PHP the source code of your script does not need to be compiled 1st to work. As you know you place the source code of your PHP files direcly on to the server, and this last one takes care to compiles and run it on the fly on every client request. So it would be useless for a server to preprocces a macro and convert it into code and then process again all the code. It would result in worst performances because it would have to read source code twice.

Onlar da resmi PHP hata sitesinde yeni bir özellik isteği açtı.

http://bugs.php.net/bug.php?id=46017

"Düzeltmek değil mi" Ama belli ki o kapatıldı!