$ scope имеет другое «это», а затем контроллер «это». Таким образом, если вы ввели контроллер console.log (this) внутри контроллера, он дает вам объект (контроллер), а this.addPane () добавляет метод AddPane к объект контроллера. Но область $ имеет разный объем, и весь метод в своей области должен быть доступен $ scope.methodName (). this.methodName()
внутри контроллера означает добавить methos внутри объекта контроллера. $scope.functionName()
находится в HTML и внутри
$scope.functionName(){
this.name="Name";
//or
$scope.myname="myname"//are same}
Вставьте этот код в свой редактор и откройте консоль, чтобы увидеть ...
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>this $sope vs controller</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular.min.js"></script>
<script>
var app=angular.module("myApp",[]);
app.controller("ctrlExample",function($scope){
console.log("ctrl 'this'",this);
//this(object) of controller different then $scope
$scope.firstName="Andy";
$scope.lastName="Bot";
this.nickName="ABot";
this.controllerMethod=function(){
console.log("controllerMethod ",this);
}
$scope.show=function(){
console.log("$scope 'this",this);
//this of $scope
$scope.message="Welcome User";
}
});
</script>
</head>
<body ng-app="myApp" >
<div ng-controller="ctrlExample">
Comming From $SCOPE :{{firstName}}
<br><br>
Comming from $SCOPE:{{lastName}}
<br><br>
Should Come From Controller:{{nickName}}
<p>
Blank nickName is because nickName is attached to
'this' of controller.
</p>
<br><br>
<button ng-click="controllerMethod()">Controller Method</button>
<br><br>
<button ng-click="show()">Show</button>
<p>{{message}}</p>
</div>
</body>
</html>
В C, если никакого предыдущего объявления функции не существует, предполагается, что функция возвращает int
. Если компилятор предполагает, что функция возвращает int
, а возвращает FILE *
, а если sizeof(FILE*) < sizeof(int)
, возвращаемое значение усекается и является недействительным. Таким образом, вы получаете внутренние ошибки glibc, так как указатель, переданный в fscanf
, обрезан и недействителен.
Из man fdopen вы можете прочитать:
fdopen(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE
Это макросы, которые нужно определить, чтобы в вашей программе было объявление fdopen()
. Вы должны определить их до любого включения. Я обычно просто определяю _GNU_SOURCE
, который определяет _POSIX_C_SOURCE
и т. Д. В features.h
.
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
.. rest of the program ...
Для получения дополнительной информации см. будущие тестовые макросы .
При использовании gcc
вы также можете сделать gcc -std=gnu11
или другой -std=gnu*
. -std=c11
совпадает с -std=gnu11
за исключением того, что макрос _GNU_SOURCE
предопределен при компиляции.
В соответствии с справочной страницей Linux для fdopen()
, Linux / glibc требует определения макроса _POSIX_C_SOURCE
:
Требования к макросу тестирования возможностей для glibc (см. [117 ] feature_test_macros (7) ):
blockquote>fdopen(): _POSIX_C_SOURCE
В противном случае вы получаете неявное объявление, которое, как уже отмечалось, означает, что функция должна возвращать
int
. И указатель, который на самом деле возвращаетfdopen()
, скорее всего, не вписывается в этотint
, поэтому он усекается.