C -- bu yapı/yapmak ne demek?boş
Bu kullanmam gereken bir aygıt için bir başlık dosyası kod buldum ve yıllardır C yapıyorum ama asla Ben:
struct device {
};
struct spi_device {
struct device dev;
};
ve olarak kullanılır:
int spi_write_then_read(struct spi_device *spi,
const unsigned char *txbuf, unsigned n_tx,
unsigned char *rxbuf, unsigned n_rx);
ve de burada:
struct spi_device *spi = phy->spi;
aynı şekilde tanımlandığı.
Bu tanım ile ne olduğundan emin değilim. Kurulu bir linux uygulaması için bir başlık dosyası içinde, karşısında şaşkın. Herhangi bir açıklama, bir fikir var mı? Herkes bundan önce bazılarınız eminim:) hiç görmedim.
Teşekkürler! bp:
CEVAP
Bu C yapıları en az bir üyesi adlı içeriğine sahip olarak C değildir:
(C11, 6.7.2.1 Yapısı ve Birliği belirteçleri p8) "Eğer yapı-beyannamesi-liste içermiyor herhangi adında üyeleri, doğrudan ya da üzerinden anonim bir yapı ya da başarısız olduğunda, davranışı tanımsız."
ama GNU C uzantısı:
GCC C bir yapısı yok üyeler için izin verir:
struct empty { };
Yapıya sahip boyutu sıfır
https://gcc.gnu.org/onlinedocs/gcc/Empty-Structures.html
Linux spin_lock_t
türü Diğer çekirdek 2.4 tanımında koşullu derleme ile boş bir yapı türünün bir örneği var Linux 2.4 (/linux include/sayaç kilidi.h):
#if (DEBUG_SPINLOCKS < 1)
/* ... */
typedef struct { } spinlock_t;
#elif (DEBUG_SPINLOCKS < 2)
/* ... */
typedef struct {
volatile unsigned long lock;
} spinlock_t;
#else /* (DEBUG_SPINLOCKS >= 2) */
/* ... */
typedef struct {
volatile unsigned long lock;
volatile unsigned int babble;
const char *module;
} spinlock_t;
#endif
Amaç DEBUG_SPINLOCKS < 1
diye API işlevleri değiştirmek zorunda kalmadan bazı yer kazanmak için. Ayrıca kukla (sıfır boyutlu) nesne türü spinlock_t
tanımlamanızı sağlar.
(Son) boş bir yapısının çekirdek koşullu derleme ile kullanılan hack Linux başka bir örnek/linux/aygıtı vardır.h:
struct acpi_dev_node {
#ifdef CONFIG_ACPI
void *handle;
#endif
};
Kroah-Hartman, bu son örneğin burada Greg: tartışma bakın
Nasıl maven platform bağımsız bir yapı...
Diziler ve Karma için IRB baskı yapı y...
Bu yapı nedir `x = x || y;` demek?...
Objective-C-ınit yöntemi özel yapmak m...
Bu tilde ne demek?...