Articles of c99

La striscia del preprocessore C commenta o espande prima i macro?

Considera questa struttura di codice (orribile, terribile, non buona, molto ctriggers): #define foo(x) // commented out debugging code // Misformatted to not obscure the point if (a) foo(a); bar(a); Ho visto che i preprocessori di due compilatori generano risultati diversi su questo codice: if (a) bar(a); e if (a) ; bar(a); Ovviamente, questa è una […]

Funzione inline C99 nel file .c

Ho definito la mia funzione in .c (senza intestazione) come qui: inline int func(int i) { return i+1; } Quindi nello stesso file qui sotto lo uso: … i = func(i); E durante il collegamento ho ottenuto “riferimento non definito a ‘func’”. Perché?

Lo standard C considera che ci siano uno o due tipi di struct uperms_entry in questa intestazione?

Puoi dare un capitolo e un verso da uno dei tre standard C (preferibilmente C99 o C11) che indica se il seguente file di intestazione ha uno o due tipi di struct uperms_entry in esso? #ifndef UPERMS_CACHE_INCLUDE #define UPERMS_CACHE_INCLUDE typedef struct mutex MT_MUTEX; typedef struct uperms_cache { MT_MUTEX *cache_lock; int processing; struct uperms_entry *uperms_list; // […]

ANSI C o ISO C specifica cosa dovrebbe essere -5% 10?

Mi sembra di ricordare che ANSI C non ha specificato quale valore deve essere restituito quando uno degli operandi di un operatore modulo è negativo (solo che dovrebbe essere coerente). È stato specificato in seguito, o è sempre stato specificato e sto ricordando in modo errato?

Intervallo del valore di ritorno della funzione principale

Che cosa dice la norma sui principali valori di ritorno? Dì solo fino a 255? Perché int main(void){ return 256; } echo $? ; # out 0

Abilitare i VLA (array di lunghezza variabile) in MS Visual C ++?

Come posso abilitare l’uso di VLA, array di lunghezza variabile come definiti in C99, in MS Visual C ++ o che non è ansible? Sì, so che lo standard C ++ è basato su C89 e che i VLA non sono disponibili nello standard C89 e quindi non sono disponibili in C ++, ma MSVC […]

Tipo di dati booleani C99?

Qual è il tipo di dati booleani C99 e come utilizzarlo?

Alternativa standard al trucco ## __ VA_ARGS__ di GCC?

C’è un problema ben noto con argomenti vuoti per macro variadic in C99. esempio: #define FOO(…) printf(__VA_ARGS__) #define BAR(fmt, …) printf(fmt, __VA_ARGS__) FOO(“this works fine”); BAR(“this breaks!”); L’uso di BAR() sopra è effettivamente errato secondo lo standard C99, poiché si espanderà in: printf(“this breaks!”,); Nota la virgola finale – non lavorabile. Alcuni compilatori (ad esempio […]

Cosa significa punto (.) In un inizializzatore di struct?

static struct fuse_oprations hello_oper = { .getattr = hello_getattr, .readdir = hello_readdir, .open = hello_open, .read = hello_read, }; Non capisco bene questa syntax di C. Non riesco nemmeno a cercare perché non conosco il nome della syntax. Cos’è quello?

conversione da bool a int

Quanto è portatile questa conversione. Posso essere sicuro che entrambe le asserzioni passino? int x = 45; assert(x==0); Non chiedere perché. So che è brutto. Grazie.