czytałem o __noop i przykład MSDN jestDlaczego i kiedy używać __noop?
#if DEBUG
#define PRINT printf_s
#else
#define PRINT __noop
#endif
int main() {
PRINT("\nhello\n");
}
i nie widzę przyrost ciągu tylko o puste makro:
#define PRINT
Wygenerowany kod jest taki sam. Jaki jest prawidłowy przykład użycia __noop
, który faktycznie sprawia, że jest przydatny?
Sądzę, że są sytuacje, w których "brak instrukcji" zmienia sposób działania. Nie jestem do końca pewien, czy mogę teraz o tym pomyśleć ". –
Btw, ich przykład jest nieco podejrzany, ponieważ powoduje wyrażenie z innym typem w trybie debugowania i zwolnienia. Ale nie jest tak podejrzany, jak typ w trybie debugowania, niezależnie od "argumentów" do "PRINT"! Makra Variadic pozwalają na lepiej zachowaną definicję '#define PRINT (...) ((void) printf_s (__ VA_ARGS __))' i '#define PRINT (...) ((void) 0)', która również zatrzymuje Cię próbuje wziąść wskaźnik funkcji za pomocą '& PRINT'. –