2012-12-31 136 views
0

更新1爲什麼沒有可見的輸出?

好消息是,現在我看到的輸出通過修正調用mat()如下。

但是,有一個問題「問題」。

的 「問題」 是如下

Implicit declaration of function 'mat' is invalid in C99 


// 
// main.m 
// MultRosetta 
// 
// Created by Brian Schott on 12/30/12. 
// Copyright (c) 2012 Brian Schott. All rights reserved. 
// 

#import <Cocoa/Cocoa.h> 
// #include "code.m" 
/* 
int main(int argc, char *argv[]) 
{ 
    int mat(); 
    return NSApplicationMain(argc, (const char **)argv); 
} 
*/ 


int main(int argc, const char * argv[]) 
{ 
    return((int) mat()); 
} 

更新1

更新0

我的目錄列表如下所示。如何從終端(控制檯)運行應用程序? 我甚至不認可要運行的可執行文件。

server:MultRosetta brian$ ls -al 
total 32 
-rw-r--r-- 1 brian staff 449 Dec 30 19:31 inline 
-rw-r--r-- 1 brian staff 1441 Dec 30 08:52 code.m 
drwxr-xr-x 5 brian staff 170 Dec 30 15:40 MultRosetta.xcodeproj 
drwxr-xr-x 9 brian staff 306 Dec 30 16:11 MultRosetta 
[email protected] 1 brian staff 6148 Dec 31 08:26 .DS_Store 
drwxr-xr-x 13 brian staff 442 Dec 30 08:43 .. 
drwxr-xr-x 7 brian staff 238 Dec 31 08:26 . 
server:MultRosetta brian$ ls -al MultRosetta.xcodeproj/ 
total 24 
drwxr-xr-x 5 brian staff 170 Dec 30 15:40 . 
drwxr-xr-x 7 brian staff 238 Dec 31 08:26 .. 
-rw-r--r-- 1 brian staff 12197 Dec 30 15:40 project.pbxproj 
drwxr-xr-x 4 brian staff 136 Dec 30 08:43 project.xcworkspace 
drwxr-xr-x 3 brian staff 102 Dec 30 08:43 xcuserdata 
server:MultRosetta brian$ ls -al MultRosetta 
total 48 
drwxr-xr-x 9 brian staff 306 Dec 30 16:11 . 
drwxr-xr-x 7 brian staff 238 Dec 31 08:26 .. 
[email protected] 1 brian staff 283 Dec 30 08:43 BSAppDelegate.h 
[email protected] 1 brian staff 380 Dec 30 08:43 BSAppDelegate.m 
-rw-r--r-- 1 brian staff 1098 Dec 30 08:43 MultRosetta-Info.plist 
[email protected] 1 brian staff 153 Dec 30 08:43 MultRosetta-Prefix.pch 
[email protected] 1 brian staff 1531 Dec 30 16:11 code.m 
drwxr-xr-x 5 brian staff 170 Dec 30 08:43 en.lproj 
[email protected] 1 brian staff 289 Dec 30 10:39 main.m 
server:MultRosetta brian$ 

更新0

This is a followup question。在最初的問題中,我終於可以毫無錯誤地進行編譯,但問題仍然存在。

我在下面的代碼中看不到矩陣結果的任何輸出。建議我在「inline」語句中添加「static」,I#導入兩個Xcode事物,並將主函數名稱從「main()」更改爲「從main.m「墊()」和所謂的「墊()」。)

#import <Foundation/Foundation.h> 
#import <Cocoa/Cocoa.h> 
#include <stdio.h> 
#include <stdlib.h> 


/* Make the data structure self-contained. Element at row i and col j 
    is x[i * w + j]. More often than not, though, you might want 
    to represent a matrix some other way */ 
typedef struct { int h, w; double *x;} matrix_t, *matrix; 

static inline double dot(double *a, double *b, int len, int step) 
{ 
    double r = 0; 
    while (len--) { 
     r += *a++ * *b; 
     b += step; 
    } 
    return r; 
} 

matrix mat_new(int h, int w) 
{ 
    matrix r = malloc(sizeof(matrix) + sizeof(double) * w * h); 
    r->h = h, r->w = w; 
    r->x = (double*)(r + 1); 
    return r; 
} 

matrix mat_mul(matrix a, matrix b) 
{ 
    matrix r; 
    double *p, *pa; 
    int i, j; 
    if (a->w != b->h) return 0; 

    r = mat_new(a->h, b->w); 
    p = r->x; 
    for (pa = a->x, i = 0; i < a->h; i++, pa += a->w) 
     for (j = 0; j < b->w; j++) 
      *p++ = dot(pa, b->x + j, a->w, b->w); 
    return r; 
} 

void mat_show(matrix a) 
{ 
    int i, j; 
    double *p = a->x; 
    for (i = 0; i < a->h; i++, putchar('\n')) 
     for (j = 0; j < a->w; j++) 
      printf("\t%7.3f", *p++); 
    putchar('\n'); 
} 

int mat() 
{ 

    double da[] = { 1, 1, 1, 1, 
      2, 4, 8, 16, 
      3, 9, 27, 81, 
      4,16, 64, 256 }; 
    double db[] = {  4.0, -3.0, 4.0/3, 
      -13.0/3, 19.0/4, -7.0/3, 
       3.0/2, -2.0, 7.0/6, 
      -1.0/6, 1.0/4, -1.0/6}; 

    matrix_t a = { 4, 4, da }, b = { 4, 3, db }; 
    matrix c = mat_mul(&a, &b); 

    /* mat_show(&a), mat_show(&b); */ 
    mat_show(c); 
    /* free(c) */ 
     // NSLog (@"Here is some amazing text! %@",c); 
    return 0; 
} 
+0

是什麼讓你覺得這沒什麼用?編譯並運行這段代碼會產生4行文本。 –

+0

哪裏?我沒有看到任何。它在自己的應用程序中生成一個窗口。我在控制檯中看不到任何輸出。它在哪裏? – zerowords

+0

你說,「我輸入了兩個Xcode的東西」,但是你沒有輸入任何與Xcode相關的東西。你的意思是你進口可可的東西嗎?你應該澄清。 Xcode只是一個開發環境,而不是語言或編譯器。 Cocoa是Objective-C語言的框架,通常由gcc或clang編譯。你在說什麼? – user1118321

回答

1

你應該能夠看到這個輸出,如果你打開的Xcode控制檯(你可以做,而在Xcode 4, (Shift + 命令 + C激活控制檯和Shift + 命令 + Y切換查看&隱藏調試區域)。

或者,您可以從命令行運行可執行文件(編譯後的二進制應用程序),您可以在其中看到輸出。

編輯:

這裏是我的Xcode的窗口,在這裏你可以看到我做了一個試驗項目,並在(假設你將它設置爲「基金」的命令行工具)下跌了代碼的截圖。

Two Ways to see output

方法#1被證明了的Xcode窗口的 「輸出」 部分。

方法2將「在Finder中顯示」已編譯的產品,然後拖動&下降,與APP成一個終端窗口,你可以只是擊中返回的路徑被顯示後啓動。

我剛剛意識到的另一種想法...這可能是因爲你的代碼根本沒有運行。對我來說,運行你的代碼,我有這個功能添加到我的.m文件:

int main(int argc, const char * argv[]) 
{ 
    return(mat()); 
} 

你實際調用「mat()」功能,當你測試?

+0

我在Xcode控制檯中看不到任何東西。請看看我編輯的問題,看看我的目錄列表,並告訴我如何運行我的可執行文件。我沒有看到一個可執行文件,而且我不知道如何運行一個可執行文件,除了在終端中輸入可執行文件的名稱。請提供更多信息。 – zerowords

+0

賓果!我不得不將您的代碼添加到MY .m文件。我已將修改後的.m文件顯示爲該問題的更新。如果你不介意的話,現在我只能得到一個我希望能幫忙清理的小問題。請參閱原始問題中的**更新1 **。但主要問題是固定的,因爲我看到了輸出。另一個小問題是在Xcode導航器中,我的產品不像您的產品。我的只是一個圖形演示文件,鉛筆,尺子和一把刷子。 – zerowords

+1

從編譯器警告「'隱式聲明的函數'mat'在C99'中是無效的」,它聽起來像你所要做的就是在你的.m文件的頂部需要一個函數聲明(或者更好,在.h文件中) 。 function delcaration看起來像這樣:「'int mat()'」 –

相關問題