2015-03-27 35 views
5

'da ek noktalı virgül gerektiriyor Visual C++ 2013'te bazı C kodlarını derliyorum (C dilinde yazılmalıdır).Dönüş ifadesi, Visual Studio 2013

void drawDebugLines(vec2f pos, DebugControls *controls, vec2f dydx, vec2f p) 
{ 
    static float lineSize = 0.05f; 
    if (!controls->normalFlag && !controls->tangentFlag) 
    { 
     return; 
    } 
    vec3f nColor = cVec3f(1, 1, 0); 
    ... 

Bu kodun derlenmesi ve çalıştırılması yeterlidir.

error C2275: 'vec3f' : illegal use of this type as an expression 

Edit: O küme parantezi dışarı alırsak

, aşağıdaki derleme hatası alıyorum ben bir genel toplam koymak, bu hata vec3f nColor

Ancak açıklamada için oluşur dönüş ifadesinden sonra iki noktalı virgül (ve hiçbir parantez), kod da derleme ve sadece iyi çalışır.

Bu yalnızca Visual C++ ile olur, gcc bu kodu parantez veya ek noktalı virgül gerektirmeden derler.

Benim sorum, Visual C++ bunu neden yapıyor? "Visual Studio'nun C derleyicisi s ***" cevabını kabul ettiğim için mutluyum ama neden/nasıl oluyor?

benim başlık dosyalarında her şey bunun alakalı olmadığından emin değilim

#if __cplusplus 
extern "C" { 
#endif 
... 
#if __cplusplus 
} 
#endif 

içine sarılmış olması işaret olmalıdır ama ben her ihtimale karşı söz gerektiğini düşündüm.

Düzenleme: Eğer sadece bir dosya içine atmak ve sihirli şahit olabilirsiniz kodu:

Ekstra düzenleme: o .cpp kodu derler sonra eğer dosya için uzatma, .c olmalıdır.

#include <stdio.h> 
#include <stdlib.h> 
#include <stdbool.h> 

typedef struct vec3f vec3f; 

struct vec3f 
{ 
    float x, y, z; 
}; 

vec3f cVec3f(float x, float y, float z) 
{ 
    vec3f v; 
    v.x = x; 
    v.y = y; 
    v.z = z; 
    return v; 
} 

void drawDebugLines(vec3f pos, bool debug) 
{ 
    if (!debug) 
     return;; 

    vec3f nColor = cVec3f(1, 1, 0); 

    printf("nColor: %f %f %f\n", nColor.x, nColor.y, nColor.z); 
} 


int main(int argc, char **argv) 
{ 
    vec3f pos = cVec3f(0, 0, 0); 
    drawDebugLines(pos, true); 

    return EXIT_SUCCESS; 
} 

Ek noktalı virgül alın ve kopmasına dikkat edin. Eğer sizin için kırılmazsa ve bu benim Visual C++ versiyonum ise, o zaman dürüst olmayan bir şekilde benim için en mantıklı olanı.

+0

Evet, cVec3f bir işlevdir. Derleyici bununla iyi. – Blarglenarf

+1

Visual Studio'da da atabileceğimi gösteren tek bir dosya oluşturabilir misiniz? 'Vec2f' ve' vec3f''nü 'int' olarak değiştirirseniz, hala gerçekleşir mi? –

+1

Bu gerçek kod olamaz, işlevden dönmek için makro kullanıyor musunuz? Ayrıca, sadece vec3f nColor bildirimini işlevinin başlangıcına taşıyın, çünkü AFAIK görsel stüdyosu c derleyicisi beyanları ifadelerle karıştırmayı sevmez, ki bu iyi bir şey değildir. C++ 'da farklıdır çünkü bir deklarasyon aslında sınıf yapıcısını çağırıyor olabilir ve sizinki gibi kodlarda' nColor 'kullanmayacaksanız bunu yapmak gereksiz olurdu, ama c de endişelenecek bir şey yok. –

cevap

İlgili konular