كيف لا تعرف جبيرة وظيفتي في ملف آخر؟
سؤال
جبيرة تعطيني التحذير التالي:
encrypt.c:4:8: Function exported but not used outside encrypt: flip
A declaration is exported, but not used outside this module. Declaration can
use static qualifier. (Use -exportlocal to inhibit warning)
encrypt.c:10:1: Definition of flip
منذ أن اتصلت بشير فقط في هذا الملف كيف يعرف ذلك؟
#include <stdio.h>
#include <stdlib.h>
int flip( int a)
{
int b;
b = a;
b ^= 0x000C;
return b;
}
int blah(int argc, char *argv[]) {
FILE *fp = NULL, *fpOut=NULL;
int ch;
ch = 20; flip(20); return (ERROR_SUCCESS);
}
لقد تخلصت من الرئيسي حتى لا يمكن معرفة أن الملف مكتمل بأي شكل من الأشكال. أنا مرت تماما!
المحلول
قد تجد أنه إذا قمت بتضمين رأس إعلان flip()
- كما يجب، بالطبع - ثم splint
لن يشكو. يجب أن تعلن أيضا blah()
في الرأس كذلك.
أنا غير مقتنع تماما أن هذا هو التفسير ل blah()
لا يستخدم على الإطلاق (على الرغم من أنه يستخدم flip()
) ولا تذكر splint
يشكو من ذلك.
ومع ذلك، فهي ممارسات جيدة لجعل كل وظيفة (في ج) static
حتى تتمكن من إظهار أنه مطلوب خارج ملف المصدر الخاص به، ثم تأكد من وجود رأس يعلن الوظيفة، ويستخدم هذا الرأس في الملف الذي يحدد الوظيفة وفي كل ملف يستخدم الوظيفة.
في C ++، يجب أن تكون كل وظيفة static
"نصيحة تصبح" كل وظيفة يجب تعريفها في مساحة الاسم المجهول ".
نصائح أخرى
منذ أن اتصلت بشير فقط في هذا الملف كيف يعرف ذلك؟
لقد أجبت على سؤالك. لقد قمت بتغذيةها في ملف واحد لينت، حتى الوبر تعرف هناك ملف فقط للعناية به (بصرف النظر عن الرأس القياسي يشمل، بالطبع).
Int Flip () لا يتم الإعلان عن ثابت، لذلك يمكن استخدامه خارجيا. نظرا لأنك استدعاء جبيرة مع ملف مصدر واحد فقط، فإنه يقول بشكل صحيح أن وظيفتك، إن لم تكن تستخدم خارجيا، يجب أن تعلن ثابتا
يمكن أن يقدم فقط عن ما تراه. تجاهل التحذير أو اتبع التعليمات التي تمنعها إذا كنت تعرف أفضل مما تقوله. لا تفترض أن أداة مثل هذا يعرف بالضرورة برنامجك أفضل مما تفعله.
إذا كان من غير المقصود حقا أن يتم استخدامه خارج الملف، فيمكنك أن تعلن عنه ثابتا، ويجب أن يصحح المشكلة، لكنه سيتم الوصول إليه من ملفات أخرى.