c - مشكلة - كيفية تمكين الماكرو في اوفيس 2010



في C، كيفية تعريف ماكرو باستخدام وحدات الماكرو الأخرى، عندما وحدات الماكرو الأخرى تثير تضارب اسم (1)

تجميع التعليقات لتقديم إجابة:

الحل A،
إذا كنت لسبب ما يجب أن تلتصق مع "رو" و "كول" في التعليمات البرمجية (الاعتمادات إلى ملبومين):

enum { ROW = 100 }; 
enum { COL = 200 }; 
enum { ARRSIZE = ROW*COL };

الحل B،
إذا كنت أحرار في اختيار معرفات. أكثر قوة لإعادة الاستخدام في المستقبل:
تجنب تعارض التسمية عن طريق اختيار مختلف، غير متعارضة، هويات أطول.
لدي عدم ثقة خرافية في المعرفات القصيرة والواضحة، والصراع الذي واجهته هو مثال جيد لماذا. وهناك أمثلة أخرى كلفت أرباب العمل بعض الوقت والمال.

(لقد رأيت ملبومين في مكان آخر لا تهتم بسمعة الجواب بعد الآن، ألتروسيال جدا، وأعتقد أنه من الجدير جعل لطيف Q / A الزوج هنا ولا يأخذ أي شيء من ملبومين.)

هذا هو سؤال المتابعة بعد ذلك (يرجى قراءة سؤالي إلى النهاية): كيفية تجنب تضارب الأسماء القادمة من #define في C؟ (أو C ++) لنفترض أنني أعرف رو و كول باستخدام #define. ثم تحديد أرسيز باستخدام رو و كول. أعلن مصفوفة ثابتة مثل float myarray[ARRSIZE]; . عند تعديل رو و كول، يتغير حجم صفيف ثابت وفقا لذلك. ولكن في حالتي الخاصة، أسماء رو و كول تنازع اسم مع اسم عضو من نوع بنية أنا تستخدم في نفس الملف. قال لي شخص ما لاستخدام متغير كونست بدلا من استخدام '#define' لتجنب كونفيكت. أنا أحب أن أعدل الرمز كما بيلوو (انها إكسمبل).

const int ROW = 100;
const int COL = 200;
const int ARRSIZE = ROW*COL;
float myarray[ARRSIZE];

هذا يعطيني هذا

error: expected '=', ',', ';', 'asm' or '__attribute__' before 'ARRSIZE'

على الخط حيث أنا أرسيزي. بالطبع يمكنني استخدام int ARRSIZE = ROW*COL; داخل وظيفة وتخصيص ديناميكيا الصفيف داخل وظيفة باستخدام مالوك. ولكن ماذا لو أردت تغيير رو فقط و كول ولا تريد استخدام مالوك؟ بالطبع لا توجد مشكلة (باستثناء الصراعات اسم) عند القيام بذلك مع #define.

#define ROW 100
#define COL 200
#define ARRSIZE ROW*COL
float myarray[ARRSIZE];

لذلك المشكلة: أريد تغيير رو فقط، كول وتريد حجم صفيف ثابت تغيرت تلقائيا، ولكن في نفس الوقت، رو و كول يظهر كمتغير عضو من نوع (وهيكل) في نفس المصدر المصدر، وأنا لا يمكن إصلاح اسم العضو من نوع (لنفترض انها من ملف رأس المقدمة من قبل النظام). لذلك في كلمة واحدة، أريد أن تعريف "ماكرو مثل القيم" التي لا تطبق على وظيفة عضو / متغير أو المتغيرات العالمية. ما هي أفضل ممارسة للقيام بذلك في حالتي؟ مجرد تغيير متغير رو و كول إلى شيء خاص؟ بعد طرح هذا السؤال، أحصل على انطباع بأنه قد يكون الحل الوحيد .. :)