سلام یک برنامه لاگ همین جوری برای c نوشته بودم که قابلیت رنگ داشت . اما متوجه شدم یک چیزی غیر عادیه . این بود که فایل main.c به شرح زیر :#include <stdio.h>
#include "includes/log.c"
int main() {
normal("going to RUN");
warning("gggg");
dangerous("adfasdf");
}
و فایل log.c :
#include <stdio.h>
#include <string.h>
// colors :
#define RED "\e[31m"
#define GREEN "\e[32m"
#define YELLOW "\e[33m"
// rest code :
#define REST "\e[0m"
void println(const char *text){
printf("%s\n",text);
}
void normal(const char *text ) {
println(text);
}
void warning(const char *text) {
char final_msg[100];
strcat(final_msg,YELLOW);
strcat(final_msg,text);
strcat(final_msg,REST);
println(final_msg);
}
void dangerous(const char *text) {
char final_msg[100];
strcat(final_msg,RED);
strcat(final_msg,text);
strcat(final_msg,REST);
println(final_msg);
}
اما خروجی این بود :
going to RUN
gggg
ggggadfasdf
همون طور که میبیند gggg که مثلا برا هشداره دوبار داره نمایش داده میشه . و وقتی کد رو به این صورت تغییر دادم :
void dangerous(const char *text) {
char final_msg[100];
println(final_msg);
strcat(final_msg,RED);
strcat(final_msg,text);
strcat(final_msg,REST);
println(final_msg);
}
متوجه شدم که متغیر final_msg هنو مقداری رو داره که توی فانکشن بالایی مشابهش وجود داره و هنو همون مقدار رو داره . اما مگه تو سی متغیر ها از هم جدا نیستند ؟ چرا این اتفاق میوفته ؟