2016-03-21 42 views
8

Używam Xcode 7.3 i otrzymuję ostrzeżenie "Niejednoznaczna ekspansja makra" dla makra zdefiniowanego w Fundacji, ale które Nieokreślone i ponownie zdefiniowane w moim pliku prefiksu. Mam włączone moduły.Xcode 7.3: "Niejednoznaczna ekspansja makra" podczas ponownego definiowania makra w pliku prefiksu

Aby odtworzyć:

  • Ustaw "Włącz moduły (C i Objective-C)" Tak w ustawieniach kompilacji
  • użyć następujących plików prefix:

    #import <Foundation/Foundation.h> 
    
    #undef assert 
    #define assert(e) NSLog(@"hi") // implementation is not important 
    
  • Użyj następujący główny plik źródłowy:

    int main() { 
        assert(42); 
        return 0; 
    } 
    
  • Następnie zbuduj w Xcode.

  • Pokazuje "Niejednoznaczne rozszerzenie makra" asercie "" ostrzeżenie na linii w pliku źródłowym, które używa makra "assert". "Rozszerzanie tej definicji" assert "" wskazuje na definicję z nagłówka systemu, a nie moją redefinicję. "Inna definicja" assert "" wskazuje na definicję w moim pliku prefiksu.

To ostrzeżenie nie występuje, gdy moduły są wyłączone.

Odpowiedz

4

To jest błąd w Xcode; będziemy wdzięczni za zgłoszenie błędu na stronie https://bugreport.apple.com i pozostawienie błędu # w komentarzu tutaj. Twoje opcje obejścia tego błędu w międzyczasie to:

  • Możesz użyć innej nazwy niż "assert" dla tego makra.
  • Można ustawić ustawienie kompilacji GCC_PRECOMPILE_PREFIX_HEADER na NIE, ponieważ PCH nie zapewnia dużych korzyści, gdy już masz moduły. Nagłówek prefiksu nadal będzie działał, po prostu nie zostanie przekształcony w PCH.
  • Można wyłączyć moduły.
+4

To nadal wydaje się być problemem w Xcode 8. –

+1

To samo w Xcode 9 – iosdude