2016-07-21 4 views
1

Я пытаюсь использовать cython, чтобы предоставить оболочку для моих утилит C++. Одна такая функция, которую я пытаюсь сделать доступной, - это аксессор, который возвращает перечисление на основе типа файла.Cython __pyx_r может использоваться неинициализированным в этой функции

Вот как я заново определить функцию в Cython:

cdef extern from "reader.h" namespace "magic_number": 
    enum mcr_magic_number_t:                    
     MDI = 0                        
     EOT                         
     RV                         
     UNKNOWN 

, а затем в моем reader.pxd файле у меня есть

cpdef mcr_magic_number_t magic_number(self) 

, а затем в моем reader.pyx файле у меня есть

cpdef mcr_magic_number_t magic_number(self):    
    """           
    :return: the magic_number enum      
    :rtype: mcr_magic_number_t       
    """             
    return self.thisptr.magic_number() 

Теперь, когда я собираюсь скомпилировать это, я получаю предупреждение

warning: ‘__pyx_r’ may be used uninitialized in this function

Каждый знает, как лучше обойти это? Я попытался найти решения в google, но все, что у меня было, это страницы других людей, сообщающих одно и то же предупреждение __pyx_r. Может быть, есть способ установить значение по умолчанию или убедиться, что он всегда инициализируется внутри cython?

+0

Я подозреваю, что это не проблема. Однако, если у вас есть сомнения, посмотрите на C, чтобы узнать, в каких обстоятельствах он не инициализируется. К сожалению, не зная, что такое 'self.thisptr', для кого-то еще не может быть никакого взгляда. – DavidW

ответ

0

проверки self.thisptr для не-NULL значения Try:

if <void*>self.thisptr != NULL: 
    return self.thisptr.magic_number()