diff --git a/src/unity.c b/src/unity.c
index 29b40c2..919dafa 100644
--- a/src/unity.c
+++ b/src/unity.c
@@ -1092,8 +1092,14 @@ void UnityIgnore(const char* msg, const UNITY_LINE_TYPE line)
 }
 
 //-----------------------------------------------
+#ifdef UNITY_SUPPORT_WEAK
+void setUp(void) { }
+void tearDown(void) { }
+#else
 void setUp(void);
 void tearDown(void);
+#endif
+//-----------------------------------------------
 void UnityDefaultTestRun(UnityTestFunction Func, const char* FuncName, const int FuncLineNum)
 {
     Unity.CurrentTestName = FuncName;
diff --git a/src/unity_internals.h b/src/unity_internals.h
index d80c72d..18a8777 100644
--- a/src/unity_internals.h
+++ b/src/unity_internals.h
@@ -260,6 +260,26 @@ extern int UNITY_OUTPUT_CHAR(int);
 #define UNITY_COUNTER_TYPE _U_UINT
 #endif
 
+//-------------------------------------------------------
+// Language Features Available
+//-------------------------------------------------------
+
+#ifdef __GNUC__
+#define UNITY_SUPPORT_WEAK __attribute__((weak))
+#endif
+
+#ifdef __clang__
+#define UNITY_SUPPORT_WEAK __attribute__((weak))
+#endif
+
+#ifndef UNITY_WEAK
+#ifdef UNITY_SUPPORT_WEAK
+#define UNITY_WEAK __attribute__((weak))
+#else
+#define UNITY_WEAK
+#endif
+#endif
+
 //-------------------------------------------------------
 // Internal Structs Needed
 //-------------------------------------------------------