Le opzioni della riga di comando si applicano prima di qualsiasi riga letta da un file. I contenuti del file si applicano nell'ordine scritto. In generale, si otterrà almeno un avvertimento se una macro viene ridefinita, indipendentemente dal fatto che la riga di comando sia coinvolta. L'avviso può essere messo a tacere se la ridefinizione non ha importanza, forse perché entrambe le definizioni sono identiche.
Il modo giusto per rispondere a una domanda come questa è costruire un piccolo test case e provarlo. Ad esempio, in q3965956.c inserire il seguente:
#define AAA 2
AAA
ed eseguirlo tramite il preprocessore C, magari con gcc -E
:
C:>gcc -DAAA=42 -E q3965956.c
# 1 "q3965956.c"
# 1 ""
# 1 ""
# 1 "q3965956.c"
q3965956.c:1:1: warning: "AAA" redefined
:1:1: warning: this is the location of the previous definition
2
C:>
Si può vedere dall'output che la macro espansa al valore dato dallo #define
nel file. Inoltre, è possibile vedere dalla sequenza delle direttive #
che le definizioni incorporate e la riga di comando sono state elaborate prima di qualsiasi contenuto della riga 1 di q3965956.c
.
Cosa è successo quando l'hai provato? –