Articles of c99

Esiste una distinzione significativa tra implementazioni indipendenti e ospitate?

La domanda che ho è per lo più legata alla sezione quattro, paragrafo sei . Le due forms di implementazione conforms sono ospitate e indipendenti. Un’implementazione ospitata conforms accetta qualsiasi programma strettamente conforms. Come ho capito, questo costituisce il tipico ambiente applicativo, con filesystem, memoria allocata e thread … Un’implementazione indipendente conforms deve accettare qualsiasi […]

C’è qualche ragione per non usare tipi interi a larghezza fissa (es. Uint8_t)?

Supponendo che stai usando un compilatore che supporta C99 (o anche solo stdint.h), c’è qualche ragione per non usare tipi interi a larghezza fissa come uint8_t? Una delle ragioni per cui sono consapevole è che ha molto più senso usare char s quando si ha a che fare con i caratteri invece di usare (u)int8_t […]

Crea un binario collegato staticamente che usi getaddrinfo?

Ho incluso l’intestazione netdb.h , dove è incluso getaddrinfo , ma gcc emette questo avviso: warning: Using ‘getaddrinfo’ in statically linked applications requires at runtime the shared libraries from the glibc version used for linking gcc -m32 -static -s -O2 -std=c99 -D_POSIX_C_SOURCE=200112L myprogram.c Come posso compilare staticamente qualunque file manchi? Possibili soluzioni: Potrebbe essere che […]

Qual è la modalità C predefinita per l’attuale gcc (specialmente su Ubuntu)?

Quando chiedo di vedere la versione corrente di cc, ottengo questo. $ cc –version cc (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2 Copyright (C) 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ Quello che vorrei sapere è […]

C dichiarazioni variabili dopo l’intestazione della funzione nella definizione

Durante la lettura di un codice sorgente di FreeBSD (vedi: linee radix.h 158-173), ho trovato dichiarazioni di variabili che seguivano la “intestazione di funzione” nella definizione. È valido in ISO C (C99)? quando questo dovrebbe essere fatto nel codice di produzione invece di dichiarare semplicemente le variabili all’interno della “intestazione della funzione?” Perché viene fatto […]

Microsoft Visual Studio 2010 supporta C99?

Mi piacerebbe sapere se Microsoft Visual Studio 2010 supporta C99. In caso contrario, come posso utilizzare i tipi standard come intptr_t e uintptr_t ?

c99 goto dopo l’inizializzazione

Durante il debug di un arresto anomalo, ho trovato questo problema in qualche codice: int func() { char *p1 = malloc(…); if (p1 == NULL) goto err_exit; char *p2 = malloc(…); if (p2 == NULL) goto err_exit; … err_exit: free(p2); free(p1); return -1; } Il problema si verifica quando il primo malloc non riesce. Perché […]

Come aggiungere correttamente gli escape esadecimali in una stringa letterale?

Quando hai una stringa in C, puoi aggiungere codice esadecimale diretto all’interno. char str[] = “abcde”; // ‘a’, ‘b’, ‘c’, ‘d’, ‘e’, 0x00 char str2[] = “abc\x12\x34”; // ‘a’, ‘b’, ‘c’, 0x12, 0x34, 0x00 Entrambi gli esempi hanno 6 byte in memoria. Ora il problema esiste se si desidera aggiungere un valore [a-fA-F0-9] dopo la […]

Perché mescolare dichiarazioni e codici vietati fino al C99?

Recentemente sono diventato un assistente universitario per un corso universitario che insegna principalmente C. Il corso standardizzato su C90, principalmente a causa del diffuso supporto del compilatore. Uno dei concetti molto confusionari per i neofiti di C con precedente esperienza di Java è la regola che le dichiarazioni di variabili e il codice non possono […]

In C99, è f () + g () indefinito o semplicemente non specificato?

Ero solito pensare che in C99, anche se gli effetti collaterali delle funzioni f e g interferissero, e sebbene l’espressione f() + g() non contenga un punto di sequenza, f e g ne conterrebbero alcuni, quindi il comportamento sarebbe essere non specificato: o f () verrebbe chiamato prima di g () o g () prima […]