I'd recommend not to alias compilers like that. Rather, if you're interested, you could just use a simple Makefile like shown below and get it over with. Save it into a file called Makefile (yes, uppercase M followed by akefile all lowercase) in the same directory as your program.c file.
Note, I have used -std=c89 but you can delete that line or maybe even use a more modern standard such as -std=c23 if you like. If you delete, both gcc and clang will default to the latest ISO standard supported by that version of compiler.
Also since you're compiling only a single file, I have used program.c as input producing program executable on UNIX. To run this Makefile you need to invoke make from the same directory as Makefile on command-line as:
make W=1
to enable all the warnings and compile. If you set W=0 it will not warn or even print any diagnostic unless compiler really cannot generate the executable. You can also pass D=0 for optimised/release build, D=1 for debug build so you can backtrack in gdb. You can also pass A=1 if you want address sanitisers enabled. It will report if your program is touching or even looking at pointers/memory regions the wrong way, leaking memory or just generally doing operations that cannot guarantee correct behaviour. Passing V=1 will display the exact command executed to compile, otherwise it will silently compile.
Here's the full Makefile I use:
# Control build verbosity.
V ?= 0
ifeq ($(V),1)
Q :=
else
Q := @
endif
# Control DEBUG (1) or RELEASE (0) build.
D ?= 1
# Add some warning flags?
W ?= 0
# Add some address/undefined sanitiser flags?
A ?= 1
ifeq ($(shell $(CC) -v 2>&1 | grep -c "gcc version"),1)
COMPILER := gnu
else ifeq ($(shell $(CC) -v 2>&1 | grep -c "clang version"),1)
COMPILER := llvm
endif
# Delete environment garbage so we can generate absolutely controlled
LDFLAGS :=
CFLAGS :=
ifeq ($(D),1)
CFLAGS_DEFS += -D_DEBUG
else
CFLAGS_DEFS += -DNDEBUG
endif
CFLAGS_DEFS += -D_XOPEN_SOURCE=600
ifeq ($(D),0)
CFLAGS_DEFS += -D_FORTIFY_SOURCE=2
endif
CFLAGS_DEFS += -D_LARGEFILE64_SOURCE=1
CFLAGS_DEFS += -D_LARGEFILE_SOURCE=1
ifeq ($(W),1)
CFLAGS_STDS += -std=c89
CFLAGS_STDS += -Wpedantic
CFLAGS_STDS += -pedantic-errors
CFLAGS_STDS += -Werror
CFLAGS_STDS += -Wall
CFLAGS_STDS += -Wextra
ifeq ($(COMPILER),gnu)
CFLAGS_STDS += -Wbad-function-cast
CFLAGS_STDS += -Wcast-align
CFLAGS_STDS += -Wcast-qual
CFLAGS_STDS += -Wduplicated-branches
CFLAGS_STDS += -Wduplicated-cond
CFLAGS_STDS += -Wfloat-equal
CFLAGS_STDS += -Wformat-nonliteral
CFLAGS_STDS += -Wformat-security
CFLAGS_STDS += -Wformat-signedness
CFLAGS_STDS += -Wformat-truncation=2
CFLAGS_STDS += -Wformat=2
CFLAGS_STDS += -Winline
CFLAGS_STDS += -Wlogical-op
CFLAGS_STDS += -Wmissing-declarations
CFLAGS_STDS += -Wmissing-format-attribute
CFLAGS_STDS += -Wmissing-include-dirs
CFLAGS_STDS += -Wmissing-noreturn
CFLAGS_STDS += -Wmissing-prototypes
CFLAGS_STDS += -Wnested-externs
CFLAGS_STDS += -Wno-unused-result
CFLAGS_STDS += -Wnull-dereference
CFLAGS_STDS += -Wold-style-definition
CFLAGS_STDS += -Wpointer-arith
CFLAGS_STDS += -Wpointer-sign
CFLAGS_STDS += -Wredundant-decls
CFLAGS_STDS += -Wrestrict
CFLAGS_STDS += -Wreturn-type
CFLAGS_STDS += -Wshadow
CFLAGS_STDS += -Wsign-compare
CFLAGS_STDS += -Wsign-conversion
CFLAGS_STDS += -Wstrict-aliasing
CFLAGS_STDS += -Wstrict-prototypes
CFLAGS_STDS += -Wswitch-enum
CFLAGS_STDS += -Wtrampolines
CFLAGS_STDS += -Wundef
CFLAGS_STDS += -Wuninitialized
CFLAGS_STDS += -Wunreachable-code
CFLAGS_STDS += -Wunused
CFLAGS_STDS += -Wunused-but-set-parameter
CFLAGS_STDS += -Wunused-but-set-variable
CFLAGS_STDS += -Wunused-label
CFLAGS_STDS += -Wunused-local-typedefs
CFLAGS_STDS += -Wunused-parameter
CFLAGS_STDS += -Wunused-variable
CFLAGS_STDS += -Wwrite-strings
else
CFLAGS_STDS += -Wmost
CFLAGS_STDS += -Warray-bounds-pointer-arithmetic
CFLAGS_STDS += -Wassign-enum
CFLAGS_STDS += -Wcomma
CFLAGS_STDS += -Wconditional-uninitialized
CFLAGS_STDS += -Wformat-type-confusion
CFLAGS_STDS += -Widiomatic-parentheses
CFLAGS_STDS += -Wloop-analysis
CFLAGS_STDS += -Wshift-sign-overflow
CFLAGS_STDS += -Wshorten-64-to-32
CFLAGS_STDS += -Wstrict-aliasing=2
CFLAGS_STDS += -Wstrict-overflow=5
CFLAGS_STDS += -Wtautological-constant-in-range-compare
CFLAGS_STDS += -Wthread-safety
CFLAGS_STDS += -Wunreachable-code-aggressive
CFLAGS_STDS += -Wunused
CFLAGS_STDS += -Wunused-argument
CFLAGS_STDS += -Wunused-but-set-parameter
CFLAGS_STDS += -Wunused-but-set-variable
CFLAGS_STDS += -Wunused-comparison
CFLAGS_STDS += -Wunused-const-variable
CFLAGS_STDS += -Wunused-exception-parameter
CFLAGS_STDS += -Wunused-function
CFLAGS_STDS += -Wunused-label
CFLAGS_STDS += -Wunused-local-typedefs
CFLAGS_STDS += -Wunused-macros
CFLAGS_STDS += -Wunused-parameter
CFLAGS_STDS += -Wunused-value
CFLAGS_STDS += -Wunused-variable
CFLAGS_STDS += -Wunused-volatile-lvalue
endif
else
# Disable all manners of warnings, even default ones.
CFLAGS_STDS += -w
endif
CFLAGS_OPTS += -fPIC
# These are needed anyway.
ifeq ($(D),1)
CFLAGS_OPTS += -O0 -g3 -ggdb3
CFLAGS_OPTS += -fno-omit-frame-pointer
else
CFLAGS_OPTS += -O3
CFLAGS_OPTS += -ffunction-sections
CFLAGS_OPTS += -fdata-sections
CFLAGS_OPTS += -fmerge-all-constants
endif
ifeq ($(A),1)
CFLAGS_OPTS += -fsanitize=address,leak,undefined
endif
# Add more include directories to your liking
CFLAGS_INCS += -I.
# Assemble them all into a singfle
CFLAGS += $(CFLAGS_DEFS)
CFLAGS += $(CFLAGS_INCS)
CFLAGS += $(CFLAGS_STDS)
CFLAGS += $(CFLAGS_OPTS)
LDFLAGS += -Wl,--as-needed
LDFLAGS += -Wl,--gc-sections
LDFLAGS += -Wl,--no-undefined
LDFLAGS += -Wl,-z,defs
LDFLAGS += -Wl,-z,nocombreloc
LDFLAGS += -Wl,-z,now
LDFLAGS += -Wl,-z,relro
# The $(Q)$(CC) has a real TAB before it, not space. If you copy paste from Lemmy, you might end up with spaces.
program: program.c
$(Q)$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)
.DEFAULT_GOAL := all
.PHONY: all
all: program
.PHONY: clean
# The space before $(Q)$(RM) is real TAB as well.
clean:
$(Q)$(RM) program
Subcultures among subcultures have existed for as long as humans in their infinite creativity existed.
Babyfurs and Diaper Lover Furries-They focus on regression. And they really love diapers.
Densha Otaku - They love photographing trains. They also get extremely violent when you ruin their shot of trains.
Cyberdeck Builders- They build retro computers with 80s SciFi aesthetic and take things too far.. Using or even building hardware to mimic timigs exactly like they behaved in 70s.
Grandmacore - People obsessed with grandma aesthetics. Very. Very. Obsessed.
Swedish Raggare - American 1950s greaser culture filtered through rural Sweden and dialled to 11.
Sapeurs - Rural Kinshasa men spend 1000s of dollars, sometimes sacrificing rent and food, to buy high end designer shit from Europe. They walk through dirt roads dressed like 19th century French dandies.
Otherkin & Therians - They think they aren't humans or at least partially non humans.
Birds aren't real- They think birds aren't real. And that they are all robots, drones sent by CIA or other secretive gangs.
Chronological Revisionists - Popularised by a German historian named Heribert Illig, followers of the Phantom Time Hypothesis believe that the Early Middle Ages (specifically 614–911 AD) never actually happened. They claim that Holy Roman Emperor Otto III and Pope Sylvester II completely fabricated three centuries of history, including the entire existence of Emperor Charlemagne, just so Otto could rule during the monumental year 1000 AD. According to them, we are actually living in the early 1700s.
The Tartaria - They believe that a technologically advanced, global utopian empire called Tartaria existed until the late 1800s. This empire supposedly used the domes and spires on old buildings (like world's fair pavilions or old European castles) to pull free, wireless electromagnetic energy straight from the ether. They believe a massive, worldwide "Mud Flood" wiped them out, and modern history was rewritten to hide the existence of free energy.
Deros Believers - Shaver claimed that humanity used to share Earth with an ancient, advanced race. When the sun started emitting toxic radiation, the advanced race fled the planet, leaving behind their underground cities. According to Shaver, these caves are now inhabited by Deros (Detrimental Robots)—degenerate, sadistic humanoids who use the abandoned ancient "ray technology" to project voices into the minds of surface-dwellers, cause freak accidents, and steal our thoughts.
There are a few more.. But I'm too bored to type them here.