Bugün beni şaşırtan bazı kodlara rastladım. .c dosyasındaki bir değişken (bir işlevin dışında) statik olarak tanımlandı. Ancak, .h dosyasında extern olarak ilan edildi. .cDeğişken olarak tanımlanmış, ancak extern olarak tanımlandığında uyarı veya hata göstergesi yok
typedef struct
{
unsigned char counter;
unsigned char some_num;
} One_Struct;
typedef struct
{
unsigned char counter;
unsigned char some_num;
const unsigned char * p_something;
} Another_Struct;
typedef struct
{
One_Struct * const p_one_struct;
Another_Struct * const p_another_struct;
} One_Useful_Struct;
extern One_Useful_Struct * const p_my_useful_struct[];
Tanım ve başlatma:
Yapısı tanımlar ve beyan .h:
static One_Useful_Struct * const p_my_useful_struct[MAX_USEFUL_STRUCTS] =
{
&p_my_useful_struct_regarding_x,
&p_my_useful_struct_regarding_y,
};
Soru: İşte benzer bir kod örneği Yani benim sorum, neden bir derleyici hatası veya uyarı almadım?
Kod, şu anda başka projelerde başarılı bir şekilde çalışıyor. İşaretçinin tanımlandığı ve düzgün olarak tanımlandığı (dış bildirimi kaldırdığım) .c dosyasının dışında hiçbir zaman kullanılmadığını fark ettim. Onu bulmamın tek nedeni, projede Lint'i çalıştırdığım ve Lint'in onu almasıydı.
Bu güzel bir nokta, hangi uzantıların bulunduğuna bakmak zorundayım. ARM için Keil uVision kullanıyorum. –
Yerinde tek bir uzantı yok. Bu derleyici ile bir şey olmalı. Girdiğin için teşekkürler, minnettarım. –