int main(int argc, char **argv) { vary("*cheez: %d+%d*", 0, 24); // Also tests that '0' is not special as an array ender vary("*albeit*"); // Should not fail with no var args in vararg function vary2('Q', "%d*", 85); int maxxi = getMaxi(6, 2, 5, 21, 4, -10, 19); printf("maxxi:%d*\n", maxxi); double maxxD = getMaxD(6, (double)2.1, (double)5.1, (double)22.1, (double)4.1, (double)-10.1, (double)19.1, (double)2); printf("maxxD:%.2f*\n", (float)maxxD); // And, as a function pointer void (*vfp)(const char * s, ...) = argc == 1211 ? NULL : vary; vfp("*vfp:%d,%d*", 22, 199); // ensure lists work properly when copied, reinited etc. varargs_listoffsets_main(); return 0; }
void generate_random_hills(ROOM_INDEX_DATA *room) { int i,j,k,l; for(i=0;i<number_range(2,6);i++) room->map.index[number_range(0,15)][number_range(0,25)].height = number_range(3,7); for(l=0;l<9;l++) for(j=0;j<16;j++) for(k=0;k<26;k++) vary(room,j,k); }
void generate_random_mountains(ROOM_INDEX_DATA *room) { int j,k,l; for(l=0;l<9;l++) for(j=0;j<16;j++) for(k=0;k<26;k++) { l = number_range(1,100); if(l == 6) room->map.index[j][k].height = 7; else room->map.index[j][k].height = 0; } for(j=0;j<16;j++) for(k=0;k<26;k++) vary(room,j,k); }
int main() { int a[]={1,2,3,4,5},i; int *p=a; // also *p=&a[0] are same printf("%d\n",*p); printf("%d %d %d %d %d\n",*(p+2),*(a+2),a[2],*(2+a),p[2]); // [2]a gives error //printf("%p %p\n",a,++a); // error: lvalue required as increment operand vary(a); // a is passed as a pointer for(i=0;i<5;i++) { printf("%d ",a[i]); } printf("\n"); //printf("%d\n",a[-4]); // syntactically correct. garbage value //printf("%d\n",a[10]); // syntactically correct. garbage value // no array bounds checking //printf("%d %d\n",p[-2],a[-2]); // syntactically correct. garbage value return 0; }
///////////////////// // static QVector<QSharedPointer<MetaTypeVariant> > MarshallRuby::VALUE2MTVariant(VALUE v) { QVector<QSharedPointer<MetaTypeVariant> > rvs(1); QSharedPointer<MetaTypeVariant> rv; QString str, str2; void *ci = NULL; QObject *obj = NULL; VALUE v1, v2, v3; switch (TYPE(v)) { case T_NONE: rv = QSharedPointer<MetaTypeVariant>(new MetaTypeVariant()); break; case T_FIXNUM: { QVariant num = (int)FIX2INT(v); rv = QSharedPointer<MetaTypeVariant>(new MetaTypeVariant(QMetaType::Int, &num)); }; break; case T_STRING: { QVariant str = QString(RSTRING_PTR(v)); rv = QSharedPointer<MetaTypeVariant>(new MetaTypeVariant(QMetaType::QString, &str)); }; break; case T_FLOAT: { QVariant num = RFLOAT_VALUE(v); rv = QSharedPointer<MetaTypeVariant>(new MetaTypeVariant(QMetaType::Double, &num)); }; break; case T_NIL: { QVariant num = 0; rv = QSharedPointer<MetaTypeVariant>(new MetaTypeVariant(QMetaType::Int, &num)); }; break; case T_TRUE: { QVariant ok = true; rv = QSharedPointer<MetaTypeVariant>(new MetaTypeVariant(QMetaType::Bool, &ok)); }; break; case T_FALSE: { QVariant ok = false; rv = QSharedPointer<MetaTypeVariant>(new MetaTypeVariant(QMetaType::Bool, &ok)); }; break; case T_OBJECT: { str = QString(rb_class2name(RBASIC_CLASS(v))); ci = Qom::inst()->getObject(v); // obj = dynamic_cast<QObject*>(ci); qDebug()<<"unimpl VALUE:"<<str<<ci<<obj; // rv = QVariant(QMetaType::VoidStar, ci); // rv = QVariant::fromValue(ci); QVariant vrv = QVariant::fromValue(ci); rv = QSharedPointer<MetaTypeVariant>(new MetaTypeVariant(QMetaType::VoidStar, &vrv)); }; break; case T_ARRAY: { QStringList ary; // ary << "a123" << "b3456"; qDebug()<<RARRAY_LEN(v)<<QT_VERSION; for (int i = 0; i < RARRAY_LEN(v); i++) { // FIXME: 也可能是对象数组,如Qt5::QString,但toString方法不好用。 // FIXME: 如,[Qt5::QApplication.translate("MainWindow", "acbc", nil), "efgggggg", "hijjjjjjjj"] ary << VALUE2Variant(rb_ary_entry(v, i)).toString(); } // rv = QVariant(ary); QVariant vary(ary); rv = QSharedPointer<MetaTypeVariant>(new MetaTypeVariant(QMetaType::QStringList, &vary)); }; break; case T_STRUCT: { // for ruby range str = rb_class2name(RBASIC_CLASS(v)); if (str == "Range") { // qDebug()<<"Range is struct???"<<BUILTIN_TYPE(v) // <<rb_class2name(RBASIC_CLASS(v)) // <<RSTRUCT_LEN(v); v1 = RSTRUCT_GET(v, 0); v2 = RSTRUCT_GET(v, 1); v3 = RSTRUCT_GET(v, 2); // qDebug()<<TYPE(v1)<<TYPE(v2)<<TYPE(v3); // qDebug()<<FIX2INT(v1)<<FIX2INT(v2); // rv = QVariant(FIX2INT(v1)); // rvs.append(QVariant(FIX2INT(v2))); QVariant num1 = FIX2INT(v1); QVariant num2 = FIX2INT(v2); rv = QSharedPointer<MetaTypeVariant>(new MetaTypeVariant(QMetaType::Int, &num1)); QSharedPointer<MetaTypeVariant> mtv(new MetaTypeVariant(QMetaType::Int, &num2)); rvs.append(mtv); } else { qDebug()<<"unsupported struct type:"<<str; } }; break; case T_CLASS: default: qDebug()<<"unknown VALUE type:"<<TYPE(v); break; } rvs[0] = rv; return (rvs); }