Aşağıda gösterilen kod satırına rastladım Sanırım boşluk döndüren ve geçersiz bir işaretçi alan bir işlev işaretçisine yayınlanmış olabilir, doğru mu?İşaretçi işlev için yayınlanıyor?
(void (*)(void *))SGENT_1_calc
Aşağıda gösterilen kod satırına rastladım Sanırım boşluk döndüren ve geçersiz bir işaretçi alan bir işlev işaretçisine yayınlanmış olabilir, doğru mu?İşaretçi işlev için yayınlanıyor?
(void (*)(void *))SGENT_1_calc
Evet, doğru. Ben çok okunabilir değil bulmak, bu yüzden fonksiyonun imza işaret edilecek ilan öneriyorum:
typedef void sigrout_t(void*);
Ben de var kodlama kongrerout_t
ile biten türleri işlevleri imzalar için böyle tipleri olduğunu. Ben döküm am üzerinde _t
Posix tarafından
ikincisi bir sonek reserved olduğundan belki
((sigrout_t*) SGENT_1_calc) (someptr);
Tipedef için ayrılan, tamamen katılıyorum. – Joe
Bir yandan, yazım hatası gereksiz ve kafa karıştırıcı (en azından bazılarına) parantez gerekliliğini ortadan kaldırır. Diğer yandan, cast'in ne olduğunu anında belirleme yeteneğini azaltır. Oyuncunun bir işlev işaretçisine dönüştüğünü öğrenmek istiyorsanız, alternatifi sağlamak için sigrout_t öğesinin ... +1 olarak tanımlandığına bakmanız gerekir. – Sebivor
_t ile biten isimler POSIX için ayrılmıştır, bkz. Http://www.gnu.org/software/libc/manual/html_node/Reserved-Names.html – satur9nine
Evet, belirttiğiniz gibi bir dökümdür.
Evet öyle, işlev bu
gibi bakıyor olmalıdır gibi adlandırmak, aksi Adını olabilirvoid func(void*);
Ancak, bir hedefin yokluğu işe yaramaz olduğu için ifadenin bir hedefi eksik. Bu yüzden
func = (void (*)(void *))SGENT_1_calc;
gibi olmalıdır evet onun size SGENT_1_calc doğrudan pointer içine
döküm SGENT_1_calc funcname atanabilir Burada proto geçersiz iÅŸlev_ismi (void *) ile bir işleve atayabilirsiniz bir işlev işaretçisi void (void için void) fonksiyonu geri dönüyor –