From mboxrd@z Thu Jan 1 00:00:00 1970 From: harold.andre@gmx.fr (Harold =?UTF-8?B?QW5kcsOp?=) Date: Fri, 20 Jun 2014 12:58:56 +0200 Subject: Understanding #ifdef in .h files Message-ID: <20140620125856.7b022baa@debian-desktop> To: kernelnewbies@lists.kernelnewbies.org List-Id: kernelnewbies.lists.kernelnewbies.org Hi, I try to understand how #ifdef in .h files works. I read Greg Kroah-Hartman's Coding style paper http://www.kroah.com/linux/talks/ols_2002_kernel_codingstyle_talk/html/mgp00031.html And as he says, i try to do a simple example but it does not work. I try with a small piece of C outside the kernel. I have 3 files. test_ifdef.h: #ifdef TEST_FUNCTION void test(int *value); #else static inline void test(int *value) { } #endif test_ifdef.c: #include "test_ifdef.h" void test(int *value) { *value += 1; } main.c: #include #include "test_ifdef.h" int main(int argc, char *argv[]) { int i = 3; printf("i = %d\n", i); test(&i); printf("i = %d\n", i); return 0; } And when i compile: $ gcc -Wall -g main.c test_ifdef.c -o test_ifdef -DTEST_FUNCTION $ ./test_ifdef i = 3 i = 4 $ gcc -Wall -g main.c test_ifdef.c -o test_ifdef test_ifdef.c:14:6: error: redefinition of ?test? void test(int *value) ^ In file included from test_ifdef.c:12:0: test_ifdef.h:17:20: note: previous definition of ?test? was here static inline void test(int *value) { } ^ $ I understand why it does not compile. But: - How it can work in the kernel code ? - Is-it possible to do this in code outside the kernel ? Thank you. Harold