ببین سی فکر میکنم اصلا داستانش از اساس فرق داره.
سی که مثل زبانهای سطح بالا نیست.
در سی شما شاید در ظاهر بیای و رشته رو با عدد مقایسه کنی، که حتی شاید تابع strcmp رو هم بتونی واسه این استفاده کنی و خطایی هم نده.
ولی موضوع اینه که سی خودش اصلا ایده ای در اینطور موارد نداره و اینطور مقایسه ها براش تعریف نشدن و معنا و استانداردی ندارن.
مقایسهء رشته و عدد در سی تعریف نشده و بی معناست.
مقایسهء رشته با عدد در زبانهای برنامه نویسی سطح بالا معنی داره، ولی در سی نه.
سی یک زبان سطح پایینه که یکسری چیزها رو اصلا چک نمیکنه. یعنی میخوام بگم اینکه وقتی به خیال خودتون عدد و رشته رو مقایسه میکنید خطایی نمیده، دلیل بر این نمیشه که اینطور مقایسه در سی تعریف شده و معنا و منطقی داره.
در سی مثلا شما میتونید براحتی از محدودهء یک آرایه هم خارج بشید و داده های شما با همدیگر و با کد اجرایی برنامه تداخل کنن؛ سی در زمان کامپایل و زمان اجرا به شما خطایی در این زمینه نمیده و فقط زمانی متوجه میشید مشکلی وجود داره که برنامه بطور غیرعادی/اشتباه عمل میکنه و جوابهای غلط میده و کارهای اشتباه میکنه یا اینکه کلا crash میکنه!
ولی بحثی که درمورد PHP داریم قضیش متفاوته و درمورد چیزهای تعریف شده و معنا دار و از قبل درنظر گرفته شده و فکر شده و طراحی شده است که PHP در زمان اجرا نسبت به اونا آگاهی و کنترل داره، و باید منطق و استانداری براشون وجود داشته باشه.
پس این مورد در سی و PHP فقط در ظاهر مشابه هستن، و در باطن از نظر ماهیتی قابل مقایسه نیستن.
رفتار سی در این مورد (مقایسهء رشته و عدد) تصادفی است، اما رفتار PHP از قبل پیشبینی شده و منطق و هدفی داره.
تازه اون مقایسهء کاراکتر و عدد هم که در سی معنا داره، بر اساس کد اسکی صورت میگیره و در برنامه های سی کاربرد زیادی داره. و یک خصیصهء اساسی اون کاراکتر با عدد واقعا با هم برابره که شرط درست درمیاد.