Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!iuvax!cica!tut.cis.ohio-state.edu!purdue!bu.edu!bu-cs!buengc!bph From: bph@buengc.BU.EDU (Blair P. Houghton) Newsgroups: comp.lang.c Subject: Re: Typeof operator in C (Re: An Interesting View of "Strong" Vs. "Weak" Typing) Message-ID: <5294@buengc.BU.EDU> Date: 15 Jan 90 21:19:51 GMT References: <16678@megaron.cs.arizona.edu> <7106@tank.uchicago.edu> <-K016ODxds13@ficc.uu.net> <5263@buengc.BU.EDU> <-121H63ggpc2@ficc.uu.net> <18180@umn-cs.CS.UMN.EDU> Reply-To: bph@buengc.bu.edu (Blair P. Houghton) Followup-To: comp.lang.c Organization: Boston Univ. Col. of Eng. Lines: 71 In article peter@ficc.uu.net (Peter da Silva) writes: FLAMES, AGAIN, SORRY: [There you go again, Peter, pretending you know better than the rest of the planet whether we should be able to see if you're flaming someone who probably knew what he was talking about before you butchered his articles and whom we can now not contact to ask more about their ideas because we find yours repugnant...come on, are you that paranoid?] FLAMES, AGAIN, DONE, I WISH... >Someone else (whom peter doesn't respect) wrote: >> C has no run-time "type" type. The type value of a typeof construct >> exists only in the mind of the compiler. > >Yes, I know that. This discussion originated with a suggestion that such >a type be added to the language. It's kind of hard to see how the semantics >of such a thing could be standardised. What could one do with it at runtime? I get it. Okay, so you want something that turns the type of an object into data. A `valoftypeof' operator? (Of course, it would be called simply 'typeof' by the ANSI committee, noting that it would have the two distinct meanings -- return a type-specifier or return a data representation of the type-specifier -- depending on whether it appeared in a value- context or not...) If it returns some integer, what does that integer mean, and what would you do with it? Obviously you're going to compare or display it, at least. I thought at first that returning a string with at least the string representation of the type-specifier would be useful, but then you get into the usual problems of defining string-constants and comparing them, but there are mechanisms for that (strcmp(), et al), so it may be sufficient to do so. However, what if there's a gaffe and, say, two variables of the same type are defined with separate declarations neither of which carries an identifier? e.g.: struct { int gobble; } dee; struct { int gobble; } gook; Obviously dee and gook are the same type, but it would be a wise (and damn slow) compiler indeed that could figure that out and assign the same internal type-specifier to them both. And it would be wrong for valoftypeof dee == valoftypeof gook not to be 1. So it would have to be either that the compiler would have to match new types (which it can do anyway, or it wouldn't be able to assign the value of dee to gook without complaining) or the valoftypeof operator would have to return the entire declaration less the variable identifier. --Blair "It still says, 'error: dollarsin pocket: concept undefined'"